我正在为Discrod服务器创建自己的机器人。到目前为止,我已经设法将“!roll”之类的命令发送给聊天室,并且机器人捕获到它也向聊天室回复“您滚动了6”。

client.UsingCommands(input => { input.PrefixChar = '!' });
command.CreateCommand("roll").Do(async (e) => {
  await channel.SendMessage(username + " rolls " + rng.Next(1, 7)) });


但是我不喜欢人们在聊天中输入命令的方式,因为它有时可能会造成破坏。我想创造一种可能性,可以通过从用户到机器人的直接消息来调用命令。您将DM机器人“滚动”,它将写入聊天记录“ andrew roll 1”。

但是我不知道该怎么做,或者甚至是不可能的。有任何想法吗?

最佳答案

一种解决方案可能是使用Delegates / EventHandlers

    var client = new DiscordClient();
        client.MessageCreated += (s, e) =>
            {
                if (!e.Message.IsAuthor && e.Message.ToLower().Contains("roll")){
/*Code here*/
}
            }
            EventHandler<MessageEventArgs> handler = new EventHandler<MessageEventArgs>(HandleMessageCreated);
            client.MessageCreated += handler;


只需确保将此委托/事件处理程序代码放在Command Services设置下,并且当有人执行!roll时,该漫游器就不会重复发布。
另外,您可以在通道对象上使用IsPrivate变量来检查在通道上发送的消息是否为DM / PM通道。

如果您需要Discord.NET v0.9.6的文档,请使用here

另外,您可能需要考虑使用Discord.NET v1.0.0 +。

关于c# - Discord:如何捕获用户到机器人的直接消息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42703102/

10-13 03:16