Discord.py Запрет участников не на моем сервере

#python-3.x #discord #discord.py

#python-3.x #Discord #discord.py

Вопрос:

Я работаю со многими серверами-партнерами в обмене запретами для предотвращения рейдерства. Обычно я получаю список идентификаторов пользователя и причину запрета. Затем используйте dyno bot, чтобы запретить их, поскольку dyno bot может запретить участников, которых нет на вашем сервере. Но теперь, когда я добавляю базу данных журнала запретов к своему боту, я хотел бы иметь возможность запрещать участников, которых нет на моем сервере.

 @client.command()
@commands.has_permissions(ban_members=True)
async def ban(ctx, member : discord.Member, *, reason=None):

    new_color = stuff
    hex_color = stuff

    if reason == None:

        embed = discord.Embed(title=f"Woah {ctx.author.name}, Make sure you provide a reason!", color=int(hex_color, 16))

        await ctx.send(embed=embed)

    else:

        dmban=(f"You have been banned from {ctx.guild.name} for '{reason}'.")
        embed=discord.Embed(title=f"{member.name} has been banned from {ctx.guild.name} for {reason}", color=int(hex_color, 16))
        embed.add_field(name=f":newspaper: {reason}", value=f"User id: {member.id}", inline=True)
        embed.add_field(name="User joined:", value=member.joined_at, inline=True)
        inlul = client.get_channel(channel_id)

        now = datetime.now()
        formatted_date = now.strftime('%Y-%m-%d %H:%M:%S')
        db = sqlite3.connect('main.sqlite')
        cursor = db.cursor()
        sql = ("INSERT INTO banlog(mod_name, mod_id, reason, datetime, ban_name, ban_id) VALUES(?,?,?,?,?,?)")
        val = (ctx.author.name, ctx.author.id, reason, formatted_date, member.name, member.id)

        cursor.execute(sql, val)
        db.commit()
        cursor.close()
        db.close()


        await member.send(dmban)
        await guild.ban(discord.Object(id=member_id), reason=reason)
        await inlul.send(embed=embed)
  

Я попытался использовать await guild.ban(discord.Object(id=member_id) который я нашел на странице github об использовании этого для запрета через user_id. Но для меня это не забанит пользователя, а добавит запрет в базу данных. Я не уверен, создаю ли я переменную для member_id или нет.

Ответ №1:

Попробуйте сделать это:

Измените команду, чтобы использовать идентификатор пользователя в качестве аргументов, затем используйте это, чтобы найти и запретить пользователя.

 user = await bot.fetch_user(int(args))
    await ctx.guild.ban(user)