спор гильдии в discord.py

#python #discord.py #disco

Вопрос:

Это Мой код, очевидно, что-то не так… Я не знаю, куда бы я поместил аргумент гильдии при определении команды, но не похоже, что я поместил его в нужное место

 async def unban(guild, ctx, *, member):  banned_users = await ctx.guild.bans()  member_name, member_discriminator = member.split('#')   for ban_entry in banned_users:  user = ban_entry.user  if(user.name, user.discriminator) == (member_name, member_discriminator):  await ctx.guild.unban(user)  await ctx.send(f'Unbanned **{user}** !')  await user.send(f"You have been unbanned from **{guild.name}")  return```  

Комментарии:

1. Почему вы хотите привести guild необходимый аргумент? Здесь это не имеет никакого смысла. Кроме того, ваша user.send часть не будет работать, так как пользователь и бот больше не используют общий сервер после запрета.

Ответ №1:

Таким образом, вы действительно можете убрать требование гильдии в этой части async def unban(guild, ctx, *, member): и просто сделать это async def unban(ctx,*,member: discord.Member):

Вам нужно поставить участника: раздор.Член, а не просто член!

Затем поместите ctx перед {guild.name} так, чтобы это выглядело как {ctx.guild.name}

Тогда во всем это должно выглядеть так!

 @client.command() async def unban( ctx, *, member:discord.Member):  banned_users = await ctx.guild.bans()  member_name, member_discriminator = member.split('#')   for ban_entry in banned_users:  user = ban_entry.user  if(user.name, user.discriminator) == (member_name, member_discriminator):  await ctx.guild.unban(user)  await ctx.send(f'Unbanned **{member}** !')  await member.send(f"You have been unbanned from **{ctx.guild.name}")  return  

Комментарии:

1. Поскольку это команда unban, подойдет ли использование discord.Member в этом случае? Поскольку пользователь уже забанен и больше не делится гильдией, следовательно discord.Member , экземпляра нет. Я предлагаю использовать discord.Object в этом случае, передав идентификатор пользователя, и вызвать guild.unban() , передав его в качестве аргумента. Вы также можете обработать часть, чтобы проверить, заблокирован ли участник, так как она возникает discord.NotFound , если участник не найден/запрещен без использования ctx.guild.bans

2. о, вы совершенно правы, на самом деле вам не нужно вызывать аргумент участника, потому что пользователь на самом деле не находится на сервере.