【问题标题】:Discord.NET C# 1.0.2 How to send messages to specific channelsDiscord.NET C# 1.0.2 如何将消息发送到特定通道
【发布时间】:2020-01-13 05:26:43
【问题描述】:

我正在制作一个可以在特定事件发生时宣布消息的机器人。有谁知道我如何将消息输出到特定的文本频道?

【问题讨论】:

  • 但它仍然是 Discord.Net,并且 C# 的库使用与 VB.NET 相同。事实上,附加分号就是使该问题中的代码 sn-ps 有效 C# 所需的全部内容。说到这一点,有人可能会争辩说 this 问题也不是 C#,因为没有提供代码。
  • 给定一个 VB 示例,如果您尝试将其转换为 C# 但遇到问题,那么该尝试应该是问题所在。
  • “我不知道从哪里开始”类型的问题往往是 Stack Overflow 的 poor fit。希望您 asking a question 之前研究并尝试解决您的问题。此外,answer your own question 是适当的,甚至是鼓励的。您找到了问题的解决方案真是太好了,但是如果您不打算与社区分享它,这似乎会自我实现您对这个问题无用的预言。

标签: c# discord.net


【解决方案1】:
public async Task Announce() // 1
{
    DiscordSocketClient _client = new DiscordSocketClient(); // 2
    ulong id = 123456789012345678; // 3
    var chnl = _client.GetChannel(id) as IMessageChannel; // 4
    await chnl.SendMessageAsync("Announcement!"); // 5
}

[1] 标准异步任务(您可以选择仅将代码包含在您自己的方法中的大括号内)。
[2] 创建一个 Discord 客户端实例。
[3] 一个随机的顺序频道 ID(替换为您自己的频道 ID)。
[4] 将 Discord Channel 的实例创建为 IMessageChannel 而不是 SocketChannel。
[5] 将消息发送到文本频道。

【讨论】:

  • 我不确定为什么会被接受,但是,这个答案是不正确的。你不能简单地创建一个新的DiscordSocketClient 并用它来做任何事情。它当前未登录,您将无法使用它来获取发送消息所需的通道。此外,理想情况下,您的应用只有一个客户端,您不会在每次需要发送消息或获取频道、公会或用户信息时都创建一个。
【解决方案2】:

正如@slothgod 所说

    public async Task Announce() // 1
{
    DiscordSocketClient _client = new DiscordSocketClient(); // 2
    ulong id = 123456789012345678; // 3
    var chnl = _client.GetChannel(id) as IMessageChannel; // 4
    await chnl.SendMessageAsync("Announcement!"); // 5
}

当您只想在一个频道中发送回复前缀消息(如上面代码中的“公告!”)时,上面的代码有效。您可以在“ulong id = ....your channel id here....;”中更改频道

但是,如果您想将自定义消息发送到自定义频道,请尝试使用此代码。

    public async Task _say(IMessageChannel chh,[Remainder]string repeat)
{
    await Context.Message.DeleteAsync();
    await chh.SendMessageAsync(repeat); // 5
}

要使用我发送的代码,只需输入以下命令:"Your Bot Prefix and Command" "Channel name or ID" "Message you want to send"

例如:DFH.say TestChannel Welcome to this channel

【讨论】:

    【解决方案3】:

    我所做的是: 使用依赖注入让登录的客户端在我想发送消息的任何地方都可用,在我的例子中,它是一个模块。

    public XModule(DiscordSocketClient client){
     this.client = client;
    }
    

    然后正如@slothgod 所说:

     private async Task Announce(ExampleType object) //1
            {
                ulong id = object.ChannelId; // 3
                var chnl = client.GetChannel(id) as IMessageChannel; // 4
                await chnl.SendMessageAsync("Message!"); // 5
            }
    

    【讨论】:

      【解决方案4】:
      public async Task TalkInChannel() //1
      {
         DiscordSocketClient _client = new DiscordSocketClient(); //2
         var channel = _client.GetChannel(Channel ID) as SocketGuildChannel; //3
         await channel.SendMessageAsync("Message Here!"); //4
      }
      

      您还可以通过创建一个嵌入然后替换“Message Here!”来使用嵌入。与“””,假 EmbedName.Build()”

      【讨论】:

        猜你喜欢
        • 2018-06-01
        • 2021-01-26
        • 2021-05-18
        • 2019-06-25
        • 2020-11-16
        • 1970-01-01
        • 2021-09-22
        • 2019-09-03
        • 2018-12-09
        相关资源
        最近更新 更多