Можно ли заблокировать доступ к командам, если они не являются членами определенного сервера Discord. Пример:
Если бот установлен на нескольких серверах.
Таким образом, если какой-либо участник с любого сервера набирает ?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)