【问题标题】:Discord.net sending direct message(PM) to specified userDiscord.net 向指定用户发送直接消息(PM)
【发布时间】:2017-10-12 00:37:18
【问题描述】:

我是新来的,所以不要评判我, 我想创建一个命令 !poke ,它将直接消息(PM)发送给指定的用户,但我似乎找不到向它提供用户 ID 的方法,而且 discord.net 几乎不存在文档。

        commands.CreateCommand("poke")
            .Parameter("target")
            .Do(async (e) =>
            {
                ulong userID = e.User.Id;
                Console.WriteLine("[" + e.Server.Name + "]" + e.User.Name + " just poked " + e.GetArg("target"));
                await e.User.SendMessage("HEY, wake up! ");
            });

【问题讨论】:

    标签: c# .net discord discord.net


    【解决方案1】:

    有几种方法可以做到这一点,首先是使用命令创建私人频道:

                    var c = discord.CreatePrivateChannel(ulong userid);
    

    并像这样从中发送消息:

                    await c.SendMessage("blabla");
    

    另一种方法是将用户存储为对象,然后从中发送消息。

                    User u = null;
                    string findUser = e.GetArg("target");
    
                            u = e.Message.MentionedUsers.FirstOrDefault(); //checking mentioned users
                            u = e.Server.FindUsers(findUser).FirstOrDefault(); //looking for specified user in server
    
                    await u.SendMessage("HEY, wake up! ");
    

    我的命令如下所示:

            commands.CreateCommand("poke")
                .Parameter("target", ParameterType.Required)
                .Do(async (e) =>
                {
                    ulong id;
                    User u = null;
                    string findUser = e.Args[0];
    
                    if (!string.IsNullOrWhiteSpace(findUser))
                    {
                        if (e.Message.MentionedUsers.Count() == 1)
                            u = e.Message.MentionedUsers.FirstOrDefault();
                        else if (e.Server.FindUsers(findUser).Any())
                            u = e.Server.FindUsers(findUser).FirstOrDefault();
                        else if (ulong.TryParse(findUser, out id))
                            u = e.Server.GetUser(id);
                    }
                    Console.WriteLine("[" + e.Server.Name + "]" + e.User.Name + " just poked " + u);
                    await u.SendMessage("HEY, wake up! ");
                });
    

    【讨论】:

      【解决方案2】:

      我想我迟到了,但我希望这会有所帮助。这适用于我的机器人。

      [Command("Test")]
                  public async Task Test(string message)
                  {
                      if (message== "Send me a message")
                      {
      
                          await Context.User.SendMessageAsync("Here is your DM message! ;)");
                      }else
                      {
                          await Context.Channel.SendMessageAsync("I can't send you a message");
                      }
                  }
      

      【讨论】:

      • 请注意,SendMessageAsync() 是一种扩展方法(来自另一个答案中的Discord.UserExtensions),因此您需要using Discord; 才能像在此答案中那样访问它们。
      【解决方案3】:

      或者,

      var u = Context.Message.Author;  // Or some other means of getting user_id
      string msg = "your message";
      await Discord.UserExtensions.SendMessageAsync(u, msg);
      

      【讨论】:

        猜你喜欢
        • 2017-05-16
        • 1970-01-01
        • 2021-01-26
        • 2019-06-02
        • 2018-12-16
        • 1970-01-01
        • 2021-04-07
        • 2017-09-20
        • 2015-02-25
        相关资源
        最近更新 更多