#discord.py #try-except
Вопрос:
Мой код:
@client.command(pass_contxt=True)
async def kick_all(ctx):
members = ctx.guild.members
members.remove(ctx.me)
for member in members:
try:
if member.id != id or member.id != id: # the two ids inputed(don't want to share my id)
await member.kick(reason="deleting server")
else:
await ctx.send(f"Failed to kick {member}.")
except discord.Forbidden: # forbidden error is the error that gets returned when the bot is forbidden to do something(in this case kick itself)
await ctx.send(f"Failed to kick {member}.")
continue
Предположим, что discord уже импортирован. Этот код не выдает мне никаких ошибок из-за использования try/except, но он работает только один раз, а затем останавливается, потому что не может пнуть себя(да, он сначала начинает пытаться пнуть себя).
P.S. Я хотел узнать, как это сделать, потому что просто удалить свой собственный сервер было бы неинтересно и не помогло бы мне учиться.
Кроме того, любая помощь будет признательна и заранее благодарна!
Ответ №1:
@client.command()
async def role_kick(ctx, role: discord.Role):
[await member.kick() for member in ctx.guild.members if role in member.roles]
Это удалит всех участников, у которых есть определенная роль, поэтому, если вы назначите всех с ролью участника и выполните [prefix]role_kick [the role]
это, это удалит всех людей с этой ролью.
Например >role_kick @members
Надеюсь, это решит ваше решение
Ответ №2:
попробовать это:
your_ids = (1234, 5678) # paste you'r ids hear
@client.command()
# me: this is a command, dpy: OK
async def kick_all(ctx):
await ctx.send('Wait A Second...') # I am alive
if ctx.author.is_owner() or ctx.author.id in your_ids:
# This is a check for user, if user is you or server owner will be
await ctx.send('Started') # Start
continued
members = ctx.guild.members # This is list of members
members.remove(ctx.me) # a user can't kick you'r self so remove bot
for member in members: # creating a loop
try: # a bot is limited and limit is Error
if member.id in your_ids: # Check member is not you
await member.kick(reason="omae wa mou shindeiru")
# Kick
else:
await ctx.send(f"Failed to kick {member}.")
# This is an log for user.
except Exception as err: # bot has not permission
await ctx.send(f"Failed to kick {member}.")
# This is an log for user.
continue # Next user
else:
await ctx.send('You don't have permission to use this command.')
боту нужно members
намерение, так вот как определяется клиент
from discord.ext.commands import *
import discord
intent = discord.Intents.default()
intent.members = True
# or
intent = discord.Intents.all()
client = Bot(command_perfix='?', intent=intent, ...)
Комментарии:
1. Я попробовал ваш код, но все, что он выдает, это «Не удалось пнуть смайлик», а затем он перестает пинать кого-либо еще.
2. боту нужно разрешение «Пинать участников».
3. боты вообще не могут пнуть себя, верно? кроме того, у моего бота есть роль администратора, которая находится на вершине рейтинга и дает ему доступ ко всему(все включено).
4. проверьте это , вам нужны
members
намерения.5. но как мы его используем? все, что говорится в документации, — это выполнить клиент.намерение.