如何限制bot在私信中回复bot命令?
How to restrict bot to give response of bot command in private message?
我已经创建了机器人,但是当有人在私人消息中使用命令进行 DM 时,它会在私人消息中给出回复。
我想让机器人仅在用户在服务器和文本通道中时响应命令。
有什么帮助吗?
所以基本上您需要在您的 CommandHandler 中添加类似于此的行,这就是您可以阻止任何 none 公会消息的方法。
if (message.Channel is SocketDMChannel) return;
只要通道是 SocketDMChannel,就会 return 从该方法中。
我不得不在很多地方使用这个验证,所以我扩展了 ModuleBase 并将我所有的验证放在里面。 :
public bool IsFromGuildChat()
{
var IsFromGuildChat = Context.Guild.Id != 0;
if (IsFromGuildChat == false)
throw new RequiresDiscordGuildException(); //custom exception
return IsFromGuildChat;
}
然后在我的命令的顶部:
[Command("test")]
[Alias("t")]
public async Task Test()
{
//validation
if (!IsFromGuildChat())
return;
await ReplyAsync("This is only called from Guild Chat!");
}
我已经创建了机器人,但是当有人在私人消息中使用命令进行 DM 时,它会在私人消息中给出回复。
我想让机器人仅在用户在服务器和文本通道中时响应命令。
有什么帮助吗?
所以基本上您需要在您的 CommandHandler 中添加类似于此的行,这就是您可以阻止任何 none 公会消息的方法。
if (message.Channel is SocketDMChannel) return;
只要通道是 SocketDMChannel,就会 return 从该方法中。
我不得不在很多地方使用这个验证,所以我扩展了 ModuleBase 并将我所有的验证放在里面。 :
public bool IsFromGuildChat()
{
var IsFromGuildChat = Context.Guild.Id != 0;
if (IsFromGuildChat == false)
throw new RequiresDiscordGuildException(); //custom exception
return IsFromGuildChat;
}
然后在我的命令的顶部:
[Command("test")]
[Alias("t")]
public async Task Test()
{
//validation
if (!IsFromGuildChat())
return;
await ReplyAsync("This is only called from Guild Chat!");
}