Задать вопрос
  • Как снять с пользователя роль с помощью id в discord.py?

    @Bezola Автор вопроса
    soremix,
    import discord
    from discord.ext import commands
    from discord.utils import get
    from config import settings
    import json
    from random import randint
    import os
    import json_checker
    import ranks
    import auth_code
    
    
    bot = commands.Bot(command_prefix=settings['prefix'])
    print('Started')
    
    
    @bot.event  # Очки за скрин
    async def on_message(ctx):
    
        author = ctx.author
        for attach in ctx.attachments:
            await attach.save(f"{path}\\user_photos\\{attach.filename}")
            print('Скачал файл...')
    
            imgs = os.listdir(f'{path}\\user_photos\\')  # проверка расширения файла
            print(imgs)
            filename, file_extension = os.path.splitext(f'{path}/user_photos/{imgs[0]}')
            # filename = re.sub(f'{path}/user_photos/', '', filename, flags=re.DOTALL)
    
            if not file_extension == '.png' and not file_extension == '.jpg':
                embed = discord.Embed(
                    title=f'Ошибка',
                    description='Не подходящий формат файла',
                    colour=discord.Colour.gold()
                )
                embed.set_footer(text='Используйте формат PNG')
                await ctx.channel.send(embed=embed)
    
            users_data = list(json_checker.load_stats_data())  # получаем данные со stats.json
    
            with open("stats.json", "w") as f:  # Проверка на наличие пользователя в базе
                user_is_not_exists = True
                for user in users_data:
                    if user['author'] == ctx.author.id:
    
                        role_1 = author.guild.get_role(ranks.rank_give(user['exp'], user['hero']))  # Снятие настоящей роли
                        await author.remove_roles(role_1)
    
                        rand_exp = randint(1, 3)
                        user['exp'] += rand_exp
                        user_is_not_exists = False
    
                        role_1 = author.guild.get_role(ranks.rank_give(user['exp'], user['hero']))  # Выдача актуальной роли
                        await author.add_roles(role_1)
    
                        embed = discord.Embed(
                            title=f'"{author}"',
                            description=f' Вам начислено **{rand_exp} славы**',
                            colour=discord.Colour.gold()
                            )
                        await ctx.channel.send(embed=embed)
                        print('пользователю', author, f'Добавлено xp {rand_exp}')
    
                if user_is_not_exists:
                    users_data.append({'author': ctx.author.id, 'exp': 1, 'hero': 0})
                    print('пользователь', author, 'зарегестрирован')
                    await ctx.channel.send('Вы успешно зарегестрированы!')
                json.dump(users_data, f)
    
            os.remove(f'{path}\\user_photos\\{attach.filename}')
            print('Удалил файл...')
        await bot.process_commands(ctx)
    
    
    @bot.command()  # Получить свою статистику
    async def stat(ctx):
        sleep(randint(2, 6))
        author = ctx.author
        users_data = list(json_checker.load_stats_data())  # получаем данные со stats.json
    
        with open("stats.json", "w") as f:  # Проверка на наличие пользователя в базе
            user_is_not_exists = True
            for user in users_data:
                if user['author'] == ctx.author.id:
                    exp = user['exp']
                    hero = user['hero']
                    user_is_not_exists = False
    
                    def check(m):
                        return m.author.id == ctx.author.id
    
                    if exp >= 60 and hero == '0':
    
                        role_1 = author.guild.get_role(834011442079596564)  # Выдача актуальной роли
                        await author.add_roles(role_1)
    
                        embed = discord.Embed(
                            title=f'Поздравляем "{author}"',
                            description='**Вы достигли ранга <@&834011146222436363>** \n*Выберите героя:* \n'
                                        '1.<@&834011803486257174>\n2.<@&834011621458051072>\n3.<@&834012072110981130> ',
                            colour=discord.Colour.gold()
                        )
                        embed.set_footer(text='Напишите число')
                        await ctx.channel.send(embed=embed)
    
                        while hero == '0':
                            answer = await bot.wait_for("message", check=check)
                            hero = answer.content
                            if hero == '1' or hero == '2' or hero == '3':
                                user['hero'] = hero
                            else:
                                hero = '0'
                                embed = discord.Embed(
                                    title=f'Ошибка"',
                                    description='Отправьте число от 1 до 3',
                                    colour=discord.Colour.gold()
                                )
                                await ctx.channel.send(embed=embed)
    
                    embed = discord.Embed(
                        title=f'Статистика "{author}"',
                        description=ranks.rank_show(exp, hero) + f'**Ваш уровень славы {exp}**',
                        colour=discord.Colour.gold()
                    )
                    embed.set_image(url=ranks.rank_pic(exp, hero))
                    await ctx.channel.send(embed=embed)
                    print('Пользователю', author, 'показана статистика')
                    json.dump(users_data, f)
    
            if user_is_not_exists:
                users_data.append({'author': ctx.author.id, 'exp': 0, 'hero': 0})
                print('Пользователь', author, 'зарегестрирован')
                await ctx.channel.send('Вы успешно зарегестрированы!')
                json.dump(users_data, f)
    
    
    @bot.command()
    @commands.has_permissions(manage_guild=True)
    async def reset(ctx):
    
        users_data = list(json_checker.load_stats_data())
        reset_users = len(users_data)
    
        def check(m):
            return m.author.id == ctx.author.id
    
        key = randint(100, 999)
        print(key)
        code = auth_code.code(key)
        embed = discord.Embed(
            title=f'Вы уверены?',
            description=f'Для подтверждения введите код: \n {code}',
            colour=discord.Colour.gold()
        )
        embed.set_footer(text='Команда сбросит статистику всех игроков')
        await ctx.channel.send(embed=embed)
    
        answer = await bot.wait_for("message", check=check)
        code = answer.content
    
        if code == str(key):
            with open("stats.json", "w") as f:
                for user in users_data:
                    users = get(bot.get_all_members(), id=user['author'])
                    print(users)
                    role_1 = users.guild.get_role(ranks.rank_give(user['exp'], user['hero']))  # Снятие ролей
                    await users['author'].remove_roles(role_1)
                users_data = []
                json.dump(users_data, f)
    
                embed = discord.Embed(
                    title=f'Успешно:white_check_mark:',
                    description=f'Сброшено {reset_users} аккаунтов',
                    colour=discord.Colour.gold()
                )
                await ctx.channel.send(embed=embed)
        else:
            embed = discord.Embed(
                title=f'Неверный код',
                description=f'Сброс отменен',
                colour=discord.Colour.gold()
            )
            await ctx.channel.send(embed=embed)
    
    bot.run(settings['token'])
  • Как снять с пользователя роль с помощью id в discord.py?

    @Bezola Автор вопроса
    soremix, не понял что вы от меня хотите -_- объявление какой переменной?
  • Как снять с пользователя роль с помощью id в discord.py?

    @Bezola Автор вопроса
    Сделал так
    for user in users_data:
                    users = get(bot.get_all_members(), id=user['author'])
                    role_1 = users.guild.get_role(834011803486257174)  # Снятие ролей
                    await users['author'].remove_roles(role_1)
                json.dump(users_data, f)

    Выдает ошибку
    'NoneType' object has no attribute 'guild'
  • Как узнать на сколько пикселей отличаются друг от друга фотографии в python?

    @Bezola Автор вопроса
    Вы меня не так поняли. Нужно чтобы два разных изображения сравнивались.
    Пытался сделать через Imagechops.difference
    user_image = Image.open(f"C:\\prog\\user_photos\\{imgs[0]}")  # Проверка фото на соответсвие
    check_image = Image.open('C:\\prog\\check_photos\\unknown.png')
    result = ImageChops.difference(user_image, check_image)
    print(result)

    Но выводит какую-то чехарду
    <PIL.Image.Image image mode=RGBA size=862x485 at 0x1A7A97E9BE0>