我正在使用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}}),如果需要,请随时加入我的服务器之一进行“扩展对话”。