Как покинуть discord сервер по его идентификатору в discord.py?
Мне необходимо сделать команду ">server-leave [id сервера]", по которой discord бот будет покидать этот сервер которого id я укажу при вызове. Целый день пытаюсь решить эту легкую задачку, но все коды которые я использовал из документации / вопросов других пользователей просто не работают. Пожалуйста, помогите. Вот код который я имею, и он не рабочий:
@bot.command(aliases=['server-leave'])
async def __leave_from_server(ctx, serverid = None):
if ctx.author.id in devlist:
if serverid == None:
await ctx.send(embed = discord.Embed(title = "Укажите id сервера"))
else:
try:
toleave = bot.get_guild(serverid)
await bot.leave_guild(toleave)
await ctx.send(embed = discord.Embed(title = "Успешно"))
except:
try:
toleave = bot.get_guild(serverid)
await toleave.leave()
await ctx.send(embed = discord.Embed(title = "Успешно"))
except:
await ctx.send(embed = discord.Embed(title = "Ошибка"))
Ответы (1 шт):
Поскольку Python - язык с динамической типизацией, по умолчанию все, полученные в качестве аргументов, значения принимают строковый тип str, так как фактически были получены из строки (str), содержащей текст сообщения.
Функция get_guild() принимает в качестве аргумента id сервера в виде целого числа (int), а вы подаете строку (str).
Чтобы вручную не выполнять приведение типов (serverid = int(serverid)), можно просто указать тип аргумента в функции:
async def __leave_from_server(ctx, serverid: int=None):
Дополнительно:
Чтобы не использовать if-else и не создавать лишних отступов, можно при несоблюдении условия вызывать возврат функции (return), что будет прерывать ее дальнейшее выполнение.
Без return:
@bot.command(aliases=['server-leave'])
async def __leave_from_server(ctx, serverid: int=None):
if ctx.author.id in devlist:
if serverid == None:
await ctx.send(embed = discord.Embed(title = "Укажите id сервера"))
else:
# Ошибок нет, функцию можно выполнять
С использованием return:
@bot.command(aliases=['server-leave'])
async def __leave_from_server(ctx, serverid: int=None):
if ctx.author.id not in devlist:
return
if serverid == None:
await ctx.send(embed = discord.Embed(title = "Укажите id сервера"))
return
# Ошибок нет, функцию можно выполнять