【发布时间】:2021-01-26 12:58:40
【问题描述】:
Public Async Function Kick(ByVal user As IGuildUser, <Remainder> ByVal reason As String) As Task
Dim guild = Context.Guild
Dim bot = Context.Client
Dim message = Context.Message
Dim u = Context.User
'Channel Info
Dim _client As New DiscordSocketClient
Dim id As ULong = 1235234987 'Random numbers not a channel id
Dim chnl As IMessageChannel = _client.GetChannel(id)
If u.Id = "id" Or "id" Or "id" Then
Dim embed As New EmbedBuilder With {
.Author = New EmbedAuthorBuilder With {
.IconUrl = u.GetAvatarUrl,
.Name = u.Username
},
.Title = $"{user.Username}#{user.Discriminator}'s Kick Information",
.ImageUrl = "https://i.imgur.com/vc241Ku.jpeg",
.Description = reason,
.Color = New Color(masterClass.randomEmbedColor),
.ThumbnailUrl = user.GetAvatarUrl,
.Timestamp = Context.Message.Timestamp,
.Footer = New EmbedFooterBuilder With {
.Text = "Kick Data",
.IconUrl = guild.IconUrl
}
}
Await chnl.SendMessageAsync("", False, embed.Build())
Await user.SendMessageAsync("", False, embed.Build())
Await user.KickAsync(reason)
Else
Await Context.Channel.SendMessageAsync("You do not match the IDs that are required for this. Bye.")
End If
End Function
这是我的 kick 命令,我将如何制作它以便将嵌入发送到特定频道?我已经设置了它,所以它会向用户发送嵌入,但我希望它现在将该嵌入发送到服务器中的某个通道。也是一个旁注。有谁知道我可以在哪里在线托管机器人而不是自我托管或关于我可以在哪里托管它的好教程?
【问题讨论】:
-
从
Guild获取你想要的频道,然后在上面调用SendMessage。公会有可用的方法,例如GetTextChannel -
当我执行 guild.GetTextChannelAsync(id).SendMessage("message") 时。它告诉我“SendMessage 不是任务(ITextChannel)的一部分”
-
因为它不是...... Intellisense 没有将该方法显示为 SendMessageAsync() 吗?此外,您不能在任务上调用该方法。您需要在实际的 TextChannel 上调用它。如果您使用了 SocketGuild 实例,则不需要 Async 方法 GetTextchannelAsync...。相反,您可以使用 GetTextChannel
-
当我执行 guild.GetText 时,唯一显示的是 GetTextChannelAsync。当在那些没有说什么消息的时候。当我做 Context.Guild.Get 时,结果是一样的。
-
那么你的公会不是 SocketGuild 类型,可能是因为你的上下文不是 SocketCommandContext。如果您使用的是 Async 方法,您需要等待它,就像您应该使用任何 Async 任务一样
标签: vb.net discord.net