我正在制作一个程序,该程序大部分时间都在没有人坐在电脑前的情况下运行。我认为如果发生需要手动完成的事情,该程序可以在Discord上向您发送PM,那就太好了。因此,用户在配置中设置了自己的姓名和#号,如果发生什么事情,程序会通知此人。因此,我设置了所有内容,只要Discordbot使用MessageRecivedEvent,它就可以工作。我尝试使用就绪事件,但这不起作用。
我的"启动"-代码:
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;
}
我找到了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开发者门户网站上。你可以在Bot部分找到它。