python - python bot阻止访问命令
问题描述
如果命令不是特定不和谐服务器的成员,是否可以阻止对命令的访问。例子:
如果 bot 安装在多个服务器中。
因此,如果来自任何服务器类型的任何成员,?ping
只有当他是主服务器的成员时它才应该工作。否则,机器人会使用自定义消息回复。
class NonMember(commands.CommandError):
def __init__(self, server_id, *args, **kwargs):
self.server_id = server_id
super().__init__(*args, **kwargs)
def is_member_of(server_id):
def predicate(ctx):
server = bot.get_server(server_id)
if not server:
raise commands.CommandError("Cannot poll members of server with id {}".format(server_id))
if bool(server.get_member(ctx.message.author.id)):
return True
else:
raise NonMember
return commands.check(predicate)
@bot.event
async def on_command_error(error, ctx):
if isinstance(error, NonMember):
await bot.send_message(ctx.message.channel, "{} Not an member. ".format(error.user.mention))
@bot.command(pass_context=True)
@is_member_of("1234")
async def ping(ctx):
msg = "Pong {0.author.mention}".format(ctx.message)
await bot.say(msg)
解决方案
您可以编写一个commands.check
用于Server.get_member
尝试在给定服务器中查找成员的方法。就像是
class NonMember(commands.CommandError):
def __init__(self, server_id, *args, **kwargs):
self.server_id = server_id
super().__init__(*args, **kwargs)
@bot.event
async def on_command_error(error, ctx):
if isinstance(error, NonMember):
await bot.send_message(ctx.message.channel, "{} Not an member. ".format(error.user.mention))
def is_member_of(server_id):
def predicate(ctx):
server = bot.get_server(server_id)
if not server:
raise commands.CommandError("Cannot poll members of server with id {}".format(server_id))
if bool(server.get_member(ctx.message.author.id)):
return True
else:
raise NonMember(server_id)
return commands.check(predicate)
@bot.command(pass_context=True)
@is_member_of("1234")
async def ping(ctx):
msg = "Pong {0.author.mention}".format(ctx.message)
await bot.say(msg)
推荐阅读
- reactjs - reactjs 中 ngClass.xs 或 md 的相关代码
- javascript - TypeError: (0 , _css.default) 不是函数
- c++ - C++ 非公共助手类和内联代码
- javascript - 我应该如何从正确编码的 GraalJS 脚本引擎获取脚本输出?
- .net - 找不到框架“Microsoft.AspNetCore.App”,版本“3.1.3”
- azure-devops - Azure Pipelines:等待触发的管道完成(Chain Builds Awaiter)
- javascript - 根据键值合并对象数组
- c++ - 如何解决 XCode 中的 C++ 模板链接错误?
- r - 如何为管道运算符中的选择分配新值?
- java - 使用 Spring 在 java 中为 RESTful API 创建端点的最佳方法