我正在为Discrod服务器创建自己的机器人 . 到目前为止,我已经成功地将“!roll”等命令发送到聊天中,并且机器人 grab 它回复“你滚动6”到聊天中 .
client.UsingCommands(input => { input.PrefixChar = '!' });
command.CreateCommand("roll").Do(async (e) => {
await channel.SendMessage(username + " rolls " + rng.Next(1, 7)) });
但我不喜欢人们在聊天中键入命令的方式,因为它可能会在某些时候造成破坏性 . 我想通过从用户到机器人的直接消息来创建调用命令的可能性 . 你将DM机器人“滚动”,它将写入聊天“andrew rolling 1” .
但我不知道该怎么做或者甚至可能 . 有任何想法吗?
2 回答
一种解决方案可能是使用Delegates / EventHandlers
只需确保将此委托/ EventHandler代码放在Command Services设置下面,并且当有人执行
!roll
时,机器人不会双重发布 .此外,您可以在通道对象上使用
IsPrivate
变量来检查通道上发送的消息是否是DM / PM通道 .如果你需要Discord.NET v0.9.6的文档,here它是 .
此外,您可能需要考虑使用Discord.NET v1.0.0 .
我在网上找到的当前答案令人沮丧,这就是我做的方式(找不到任何人提到的“上下文”或“IsPrivate”) . 不得不通过检查对象本身来解决这个问题 .
根据源,SocketMessage.Channel属性似乎从SocketTextChannel更改为SocketDMChannel . 下面是我确定消息是否为DM的方法 .
希望这有助于有人节省5小时,这浪费了我:)