Как сделать, чтобы бот забанил участника везде, где есть бот? Discord.py
Я делаю бота в дискорде на языке python и мне нужно сделать так, чтобы если забанили пользователя на одном дискорд сервере, то бот автоматически банил на других дискорд серверах где есть этот же бот и сам пользователь. Посмотрел куча видео, но там везде пишут на 1 дискорд сервер.
Код:
@bot.command()
@commands.check(moderator)
async def бан(ctx, member : discord.Member, *, reason = None):
await ctx.send(f'Участник под ником <@{member.id}> был забанен')
await member.ban(reason=reason)
Ну стандартный код на бан. Так же прочитал документацию по discord.py, но не понял, наверное я глупый.
Ответы (3 шт):
Автор решения: RAINGM
→ Ссылка
@bot.command()
@commands.check(moderator)
async def бан(ctx, member : discord.Member, *, reason = None):
for guild in bot.guilds:
for member1 in guild.members:
if member1 == member:
await member.ban(reason=reason)
Автор решения: JiMoon - Python
→ Ссылка
<3
@bot.command()
# @commands.check(moderator) --> Скорее всего, вы имели ввиду проверка на наличие роли.
@bot.has_any_role('moderator')
async def бан(ctx, member_ban : discord.Member, *, reason = None):
# await ctx.send(f'Участник под ником <@{member.id}> был забанен') --> Ошибка в member.id, вы усложнили себе задачу.
await ctx.send(f'Участник под ником {member.mention} был забанен')
for guild in bot.guilds:
for member in guild.members:
if member_ban.id == member.id:
try:
await member.ban(reason = reason)
except:
pass
Автор решения: HellSai
→ Ссылка
Если вы хотите, чтобы только вы могли использовать эту команду (именно создатель бота) и банился только участник, который ЕСТЬ на том сервера, то вот:
def dev(ctx):
return ctx.message.author.id == 'ваше id'
@bot.command() # Создаём команду
@commands.check(dev) # Даём разрешение только использовать её создателю бота
async def guilds_ban(ctx, user_id: int, reason = 'решение администрации'):
for guild in bot.guilds: # Перебираем все сервера, где есть бот
for member in guild.members: # Берём всех участников сервера
try:
if user_id == member.id: # Проверка: если user_id равно member.id (с сервера), то...
await member.ban(reason = reason) # Баним этого пользователя
except:
print('Произошла ошибка!')
А если хотите чтобы на ВСЕХ серверах, даже если его НЕТ, то вот:
def dev(ctx):
return ctx.message.author.id == 'ваше id'
@bot.command() # Создаём команду
@commands.check(dev) # Даём разрешение только использовать её создателю бота
async def guilds_ban(ctx, user_id: int, reason = 'решение администрации'):
for guild in bot.guilds: # Перебираем все сервера, где есть бот
try:
user = await bot.fetch_user(user_id)
await user.ban(reason = reason) # Баним этого пользователя
except:
print('Ошибка!')
Проверяйте, если не будет работать, то напишите ниже!