如何解决Discord漫游器未在嵌入中显示来自其他服务器的表情
我正在使用Discord.Net 2.2.0并用VB.NET编写discord机器人。我的机器人程序的许多功能之一(过于雄心勃勃?)将嵌入来自《星际大战:英雄银河》等手机游戏的玩家数据。这包括某些角色能力信息,我希望其中包含一些表情符号,以使其在美学上更加令人愉悦。最初,我将表情上传到了要测试的服务器上,并且一切正常:
但是,我意识到,如果我的机器人大肆宣传,我真的不可能在每台服务器上都安装这些表情。我仍处于该项目的开始阶段,我预见到我将要使用的一些嵌入需要一些“自定义”表情。因此,我决定创建一个新的discord服务器(此后称为bot的“家庭”服务器),在其中加载这些表情以供“客户端”或“目标”服务器使用。>
不幸的是,当我尝试在嵌入中包含来自该机器人的主服务器的表情时,我得到的只是表情名称而没有图像:
与之抗争之后,我尝试将来自两个服务器的表情包含在同一嵌入中,并且得到“混合”结果。包含在客户端/目标服务器中的那些表情可以正确显示,但是来自机器人主服务器的那些表情仅显示表情名称:
Dim BotHomeServer As discord.WebSocket.socketGuild = BotClient.GetGuild(Convert.ToUInt64(HOME_SERVER_ID))
Dim TargetServer As discord.WebSocket.socketGuild = BotClient.GetGuild(Convert.ToUInt64(TARGET_SERVER_ID))
Dim PostingChannel As discord.WebSocket.socketTextChannel = TargetServer.GetTextChannel(Convert.ToUInt64(POST_CHANNEL_ID))
Dim HomeEmote As discord.Emote = Await BotHomeServer.GetEmoteAsync(EMOTE_ID_FROM_HOME_SERVER)
Dim TargetEmote As discord.Emote = Await TargetServer.GetEmoteAsync(EMOTE_ID_FROM_TARGET_SERVER)
Dim PostBuilder As New discord.EmbedBuilder
'... other fields and properties of the embed
PostBuilder.AddField("Home Server Test","Some Text Here <:" & HomeEmote.Name & ":" & HomeEmote.Id & ">",False)
PostBuilder.AddField("Target Server Test","Some Text Here <:" & TargetEmote.Name & ":" & TargetEmote.Id & ">",False)
'... other fields and properties of the embed
Await PostingChannel.SendMessageAsync("This is a test",False,PostBuilder.Build)
我也尝试过使用.ToString()
方法将表情添加到嵌入中,而不是使用Name
和Id
属性“手动”构建它们,但是我得到了确切的结果相同的结果。我通过在家庭(和客户端/目标)服务器中键入\:emotename:
来获取表情ID。表情名称(即:gohomega:
)是正确的,因此我知道它可以在漫游器的主服务器中正确找到该表情。除非它们已加载到客户端/目标服务器中,否则不会显示它们。
我在问题Discord bot can't show emote “sometimes”中发现了一个相似问题。尽管报告的问题绝对不同,但是最终结果-显示的表情符号名称而不是实际的图像-与我要解决的行为相同。这个问题中的问题是偶发性的(而我的问题是一致的),并且那里的机器人是用另一种语言(Node.js而不是.NET语言)编写的,并且使用了不同的库(我认为),这让我感到奇怪。如果问题可能出在discord身上,而不是与我的代码无关。
我已经三重检查和四重检查该漫游器(及其所在的角色组)是否有权在客户端/目标服务器上使用外部表情符号:
最初,我已经忘记了这一点,并且它没有适当的权限。但是,即使授予了必要的权限,我仍然得到相同的结果。
在这一点上,我并不是要承认自己可能只是忽略/遗漏了一些东西,或者只是对自己正在看的东西一头雾水,但我想知道是否还有其他人遇到(并希望解决)机器人使用来自其他服务器的表情符号引起的这个特殊问题。
编辑
为了确定一点,我逐步浏览了IDE中的代码,并检查了其中一种表情的属性,该表情应该被添加到嵌入中:
表情符号的Id
和Url
属性似乎是正确的,但我也继续使用浏览器“验证”了Url
属性,并验证了它确实显示了正确的图像为表情。
根据评论,机器人 是两个服务器的成员:
我在这里抓着稻草,但也许与“家庭”服务器太新了(我昨天晚上才创建它)有关?我的意思是,discord的文档说这应该可行,而discord.Net文档基本上说的是同一件事。根据评论,它适用于其他人,并且我的代码看起来“正确”,因此,这确实使我相信整个问题都与discord有关。
我也在 Discord API 服务器(#dotnet_discord-net
和 Discord Bots 服务器({ {1}}),如果需要,请随时加入我的服务器之一进行“扩展对话”。
解决方法
好的,我终于找到了问题的起因,我觉得自己很傻。我花了所有时间在服务器级别上查看漫游器的权限和组权限,但是我什至没有思考实际的通道权限。频道中的漫游器组角色的Use External Emoji
权限已设置为继承:
我将其设置为允许,并且voilà,这些表情都很好。我检查了文本通道所在类别的权限,发现甚至没有列出漫游器/组角色。我想我误以为该通道的漫游器/组角色权限将继承自我设置的服务器级别权限,即使该通道的权限屏幕顶部的消息明确指出该权限已与类别。
故事的寓意?如果看起来像是权限问题,请不要忘记在每个级别查看权限的 ALL 。
- 服务器
- 类别
- 频道
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。