Discord.Net SendMessageAsync 没有命令

Posted

技术标签:

【中文标题】Discord.Net SendMessageAsync 没有命令【英文标题】:Discord.Net SendMessageAsync without command 【发布时间】:2021-07-07 02:06:15 【问题描述】:

我正在制作一个程序,大部分时间都可以在没有人坐在 PC 前的情况下运行。如果发生需要手动完成的事情,我认为如果该程序可以在 Discord 上向您发送 PM,那就太好了。所以用户在配置中设置了他的名字和#number,如果发生了什么事,程序会PM这个人。所以我设置了所有东西,只要 Discordbot 使用 MessageRecieved-Event 就可以工作。我尝试使用 Ready-Event,但这不起作用。

我的“开始”-代码:

public async Task startDiscordBot(string DiscordName, string DiscordID, string DiscordMessage)

    _client = new DiscordSocketClient();

    setDiscordID(DiscordID); // Sets the #Number of the User
    setDiscordMessage(DiscordMessage); // Sets the Message to be send
    setDiscordName(DiscordName); // Sets the Name of the User

    await _client.LoginAsync(TokenType.Bot, Token);
    await _client.StartAsync();

    await Task.Delay(-1);

编辑:我当前的功能是这样的:

public Task Notification() // not working

    DiscordSocketClient _client = new DiscordSocketClient();

    IUser user = _client.GetUser(Name, ID); // Get the User <--- Returns null
    MessageBox.Show($"user"); // For debug
    IDMChannel channel = (IDMChannel)user.GetOrCreateDMChannelAsync(); // Get a DM Channel
    channel.SendMessageAsync(Message); // Send a DM

    return Task.CompletedTask;

【问题讨论】:

用户数据并不总是存在于Ready。另外,请尝试GetOrCreateDMChannelAsync(RequestOptions) dm 用户 你所拥有的将工作只要用户在缓存中 如何让用户进入缓存?我也尝试使用GetOrCreateDMChannelAsync(),但GetUser 每次都返回null。我尝试在 Ready-Event 触发后等待 60 秒,我尝试在 Bot 启动后等待 5 分钟。每次_client.GetUser(Name,Number) 返回“null” 【参考方案1】:

我找到了 Anwser。首先感谢您的帮助。我能够将我的代码缩小很多。

public async Task startDiscordBot()

    await _client.LoginAsync(TokenType.Bot, Token);
    await _client.StartAsync();


public async Task Notification(string message) // Working

    IUser user = _client.GetUser(Name, ID); // Get the User (wait atleast 10sec after starting)
    var channel = await user.GetOrCreateDMChannelAsync(); // Get/Create a DM Channel
    await channel.SendMessageAsync(message); // Send a DM

这行不通……每个解决方案都行不通,因为您需要在 Discord 开发者门户上启用 “SERVER MEMBERS INTENT”。您可以在 Bot 部分下找到它。

【讨论】:

以上是关于Discord.Net SendMessageAsync 没有命令的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Discord.NET 提取 Discord ID 并将其转换为用户名?

为啥删除 discord.net 崩溃中的消息

检查用户是不是有角色 Discord.net

Discord.NET Discord 机器人网络搜索响应

Discord.Net 设置机器人的昵称

Discord.NET 分配角色