• Как упростить код в Embed?

    retUrn3d
    @retUrn3d
    Пользователь, просто пользователь...
    Сделал для вас такое решение, однако это не панацея и ники по типу: "Nick Name" он не найдет.
    Но за то будет отлично работать для ников по типу: "Nickname".
    @bot.command(pass_context = True)
    @commands.has_permissions(administrator = True)
    async def checkuser_user(ctx, arg):
        await ctx.channel.send('Please, wait')
        # Пребираем все пользователей на сервере.
        for guild in bot.guilds:
            for member in guild.members:
                # Сравниваем введенный ник и ники тех кто есть на сервере, убирая идентификатор из ника "#9999" 
                if arg == str(member)[0:-5]:
                    PREFIX = '>'
                    emb = discord.Embed(title = 'User info')
    
                    emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
                    emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
                    emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
                    emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
                    emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
                    await ctx.send(embed = emb)


    И второй вариант с использованием пакета: fuzzywuzzy
    Этот вариант позволяет более гибко искать нужных пользователей, в том числе, если будет допущена незначительная ошибка в написании ника.

    from fuzzywuzzy import fuzz
    
    @bot.command(pass_context = True)
    @commands.has_permissions(administrator = True)
    async def checkuser_user(ctx, arg):
        await ctx.channel.send('Please, wait')
        # Пребираем все пользователей на сервере.
        for guild in bot.guilds:
            for member in guild.members:
                # Сравниваем введенный ник и ники полученные из списка.
                if fuzz.partial_ratio(arg, str(member)[0:-5]) > 95:  # <- Процент при котором совпадение "успешно".
                    PREFIX = '>'
                    emb = discord.Embed(title = 'User info')
    
                    emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
                    emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
                    emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
                    emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
                    emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
                    await ctx.send(embed = emb)
    Ответ написан
    1 комментарий
  • Как заставить бота написать на определённом канале?

    retUrn3d
    @retUrn3d
    Пользователь, просто пользователь...
    Для этого достаточно получить сам канал, чтобы в него что-то отправить.
    Это легко сделать с помощью: bot.get_channel(id_here)
    Но у вас стоит задача, отправлять сообщение в канал, который называется: "report".
    Для этого мы должны перебрать все каналы на нашем сервере и найти с нужным нам названием.
    for channel in ctx.guild.channels:
            if channel.name == "report":
                #Объект канала, который мы будем использовать для отправки сообщения.
                channel = bot.get_channel(channel.id)

    И в итоге, ваш код должен выглядеть следующим образом.
    @bot.command(pass_context=True)
    async def report(ctx, *, arg):
        emb = discord.Embed(title="REPORT", description=f"От пользователя {ctx.author.mention}", colour=discord.Color.red())
        emb.add_field(name="Причина:", value=arg, inline=True)
        # Получаем все каналы в нашей гильдии.
        for channel in ctx.guild.channels:
            if channel.name == "report":
                # Объект канала, который мы будем использовать для отправки сообщения.
                channel = bot.get_channel(channel.id)
                # Отправляем сообщение в нужный нам канал.
                await channel.send(embed=emb)
    Ответ написан
    Комментировать
  • Фоновый процесс на python?

    retUrn3d
    @retUrn3d
    Пользователь, просто пользователь...
    Попробуйте собрать его через pyinstaller с параметром --noconsole
    Выглядеть это должно примерно вот так:
    pyinstaller --noconsole file.py
    Ответ написан
    Комментировать
  • Как сделать бота повторяху, но в канал на выбор?

    retUrn3d
    @retUrn3d
    Пользователь, просто пользователь...
    Вы получаете первый аргумент из сообщения, а вам нужно получить все сообщение. Есть два варианта.
    (Как это работает у вас.)
    >Было< два гуся и булочка
    Чтобы ваш бот принял нужный текст и разом отослал его, необходимо обернуть все нужное в кавычки: '
    >'Было два гуся и булочка'<
    В таком случае, будет получено все сообщение в кавычках, а не только первое слово.

    Так же накидал на скорую руку реализацию пересылки сообщения в выбранный канал, где мы получаем все содержание сообщения.
    @bot.command()
    async def forward(ctx, name_channel=None):
        # Получаем id канала по его названию.
        for channel in ctx.guild.channels:
            if channel.name == name_channel:
                channel = bot.get_channel(channel.id)
                # Получаем все содержание сообщения и отсылаем его в нужный нам канал.
                content = ctx.message.content
                await channel.send(content)
    Ответ написан
    1 комментарий
  • Отправка информации о блокировке в личные сообщения. Как сделать?

    retUrn3d
    @retUrn3d
    Пользователь, просто пользователь...
    Вот пример сообщения пользователю на основе вашей же команды.
    @Bot.command(pass_context=True)
    @commands.has_permissions(administrator=True)
    async def kick(ctx, member: discord.Member, *, reason):
        channel = Bot.get_channel(789968921432031272)
        #Отправляем сообщение пользователю, до кика с сервера
        emb = discord.Embed(title="Вы были кикнуты с нашего замечательного сервера.", description="Приходите еще и получите экстра порцию банов!", colour=discord.Color.blue())
        emb.add_field(name='Кикнул вас негодяй:', value=ctx.message.author)
        await member.send(embed = emb)
        #Теперь можно кикать.
        await member.kick( reason = reason)
        await ctx.channel.purge(limit=0)
        emb = discord.Embed(color=344462)
        emb.add_field(name='✅ Kick пользователя', value='Пользователь {} был кикнут!'.format(member.mention))
        await channel.send(embed = emb)

    Стоит помнить, что если сначала кикнуть пользователя, а потом попытаться отправить ему сообщение, то ничего не выйдет.
    Ответ написан
  • Python. Как исправить ошибку EOFError: EOF when reading a line?

    retUrn3d
    @retUrn3d
    Пользователь, просто пользователь...
    В вашем случае, вы вероятно используете Python 2, потому что на Python 3 данный код выполняется корректно.
    first = int(input('First number: '))
    second = int(input('Second number: '))
    result = first + second
    print(result)

    Так же проблема может заключаться в том, что некоторые терминалы неправильно обрабатывают ввод
    (Хотя я сам с таким не сталкивался, но читал что и такое бывает в нашем мире)
    Ответ написан