Discord.py вышвырните всех участников сервера

#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. но как мы его используем? все, что говорится в документации, — это выполнить клиент.намерение.