• Как правильно обработать # IndexError: string index out of range?

    fenrir1121
    @fenrir1121
    Начни с документации
    Обычно сравнивают с предыдущим символом, а не следующим, тогда и проблем с выходом за длину строки не возникнет
    def compress(s: str) -> str:
        out = ''
        cnt = 1
        for i in range(1, len(s)):
            if s[i] == s[i - 1]:
                cnt += 1
            else:
                out += s[i - 1] + str(cnt) if cnt > 1 else s[i - 1]
                cnt = 1
    
        out += s[-1] + str(cnt) if cnt > 1 else s[-1]
        return out
    Ответ написан
    Комментировать
  • Как превратить str(словарь) обратно в словарь?

    fenrir1121
    @fenrir1121
    Начни с документации
    Можно использовать модуль ast. Но лучше воспользоваться советом Vindicar и поправить код, который привел к этой ситуации.
    In [7]: import ast
    
    In [8]: what = "{'id': '4315398315201472005'}"
    
    In [9]: d = ast.literal_eval(what)
    
    In [10]: d
    Out[10]: {'id': '4315398315201472005'}
    
    In [11]: d['id']
    Out[11]: '4315398315201472005'
    Ответ написан
    Комментировать
  • Приложение не отвечает?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Приложите код оформив как положено.

    Без отступов нельзя сказать на 100%, но вероятно дело в том, что у вас в середине функции что-то забыл return, после которого ничего не выполнится.
    Ответ написан
    1 комментарий
  • Как сделать так чтобы бот отвечал на определённое сообщение пользователя?

    fenrir1121
    @fenrir1121
    Начни с документации
    Любой учебник открываете, смотрите раздел условный оператор.
    Конструкция, которую вы написали эквивалентна выражению
    if message.text == 'Профиль' or True, что всегда будет истиной.

    Ну и для подобной проверки есть message_handler, но вы лучше с основ начните, а потом ботов трогайте.
    Ответ написан
  • Как настроить использование слэш-команды в конкретном канале (disnake)?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Это можно сделать, только не в параметрах.
    Можно либо где-нибудь в БД хранить разрешенные id каналов и повесить check на команду (предпочительно, если бот на много серверов)
    Или собственно в настройках сервера -> Интеграция выставить в каких каналах она должна быть доступна (если бот на одном сервере). В этом случае в коде вообще ничего делать не нужно.
    Ответ написан
    Комментировать
  • Не работает код Discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Не работает код Discord.py?
    Да не работает.

    библиотеки нужные я установил
    Значит не установили, иначе yarl бы подтянулся
    ➜  ~ (test) pip install discord
    ...
    ➜  ~ (test) pip freeze | cat
    aiohttp==3.8.5
    aiosignal==1.3.1
    async-timeout==4.0.3
    attrs==23.1.0
    charset-normalizer==3.2.0
    discord==2.3.2
    discord.py==2.3.2
    frozenlist==1.4.0
    idna==3.4
    multidict==6.0.4
    yarl==1.9.2


    Python 3.1.1
    Что правда 3.1.1?

    Смотрите что и как наустанавливали.
    Ответ написан
    Комментировать
  • Как сделать команду которую может использовать только владелец сервера?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Для владельца могут быть отдельные команды и готовой проверки нет, нужно пилить кастомную.

    Владельца можно получить из ctx.guild.owner_id
    # checks.py
    from discord.ext import commands
    def is_owner():
        async def predicate(ctx: commands.Context) -> bool:
            return ctx.author.id == ctx.guild.owner_id:
        return commands.check(predicate)


    и используем аналогично дискордовским
    @bot.command()
    @checks.is_owner()
    async def test(ctx):
        await ctx.send('You can manage messages.')
    Ответ написан
    Комментировать
  • Как внедрить меню dropdown?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Как внедрить меню dropdown?
    Как написано в документации и примерах использования dropdown

    (желательно ответьте куском кода )

    Код из примера
    import discord
    from discord.ext import commands
    
    class Dropdown(discord.ui.Select):
        def __init__(self):
            options = [
                discord.SelectOption(label='Red', description='Your favourite colour is red', emoji=''),
                discord.SelectOption(label='Green', description='Your favourite colour is green', emoji=''),
                discord.SelectOption(label='Blue', description='Your favourite colour is blue', emoji=''),
            ]
            super().__init__(placeholder='Choose your favourite colour...', min_values=1, max_values=1, options=options)
    
        async def callback(self, interaction: discord.Interaction):
            await interaction.response.send_message(f'Your favourite colour is {self.values[0]}')
    
    
    class DropdownView(discord.ui.View):
        def __init__(self):
            super().__init__()
            self.add_item(Dropdown())
    
    
    class Bot(commands.Bot):
        def __init__(self):
            intents = discord.Intents.default()
            intents.message_content = True
    
            super().__init__(command_prefix=commands.when_mentioned_or('$'), intents=intents)
    
        async def on_ready(self):
            print(f'Logged in as {self.user} (ID: {self.user.id})')
            print('------')
    
    
    bot = Bot()
    
    
    @bot.command()
    async def colour(ctx):
        view = DropdownView()
        await ctx.send('Pick your favourite colour:', view=view)
    
    bot.run('token')
    Ответ написан
    Комментировать
  • Почему if isinstance(interaction.component, disnake.ui.Button) возвращает False?

    fenrir1121
    @fenrir1121
    Начни с документации
    Потому что disnake.ui.Button и disnake.Button не одно и то же.

    disnake.ui.Button используется для создания кнопок, а в component лежит или disnake.Button или disnake.BaseSelectMenu
    Ответ написан
    Комментировать
  • Как выучить disnake?

    fenrir1121
    @fenrir1121
    Начни с документации
    disnake это библиотека, а не язык чтобы его учить. Берете и пользуетесь.

    Для начала у него достаточно крупное ру комьюнити и начать стоит с руководства, где очень подробно описан весь основной функционал.

    Когда основ недостаточно добро пожаловать в документацию.
    Ответ написан
    Комментировать
  • Как составить запрос к нескольким таблицам?

    fenrir1121
    @fenrir1121
    Начни с документации
    Использоваться девятью INNER JOIN.

    Но что-то мне подсказывает проблема в архитектуре базы и отсутствии внешних ключей, а не в необходимости запроса к 10 таблицам.
    Ответ написан
    Комментировать
  • Как создать слеш команды на discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Многие используют from discord_slash import SlashCommand
    Смелое заявление о библиотеке, которая не обновлялась с 2021 года. У нее уже даже архивный репозиторий удалили и ссылка ведет на interactions.py.

    Как создать слеш команды на discord.py?
    Открыть examples библиотеки, например basic.py, вставить свой токен и запустить. Все примеры снабжены исчерпывающими комментариями.
    Ответ написан
    Комментировать
  • Ошибка при импорта библиотеки?

    fenrir1121
    @fenrir1121
    Начни с документации
    Просто по приколу изучить язык прежде чем что-то делать.
    Просто по приколу не пытаться программировать на телефоне.
    Просто по приколу перевести ошибку.
    Причина и инструкция что нужно делать чёрным по белому написаны в ошибке:
    error: can't find Rust compiler

    If you did intend to build this package from source, try installing a Rust compiler from your system package manager and ensure it is on the PATH during installation. Alternatively, rustup (available at https://rustup.rs) is the recommended way to download and update the Rust compiler toolchain


    Кроме того прочитайте правила ресурса и оформите вопрос как положено: удалите теги, дискорд не имеет отношения к вашему вопросу, замените сложность и уберите портянку под спойлер
    Ответ написан
    2 комментария
  • Как исправить отличающийся символ в названии файла на macos и windows?

    fenrir1121
    @fenrir1121
    Начни с документации
    В linux и macos все кодировки по-умолчанию совпадают с UTF-8, а windows с ее cp1251 и cp866 для любителей острых ощущений.
    Что касается нормализации, есть 4 вида: NFC, NFD, NFKC и NFKD
    В разницу композиции и декомпозиции углубляться не буду, для этого есть документация и W3C, но отмечу что NFKC и NFKD могут приводить к потере данных, поэтому лучше использовать NFC, а остальные использовать если ее недостаточно.

    from unicodedata import normalize
    
    def eq_nfc(str1, str2):
        return normalize('NFC', str1) == normalize('NFC', str2)
    Ответ написан
    Комментировать
  • Временный мут на discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вероятно вы выключали бота в этом случае логика никогда не отработает.
    Необходимо хранить подобную информацию в БД. Кроме того для есть discord.ext.tasks, чтобы периодически в фоне запускать что-либо.
    Ответ написан
  • Я не могу решить вопрос с асинхронным выполнением кода. Оптимальное решение?

    fenrir1121
    @fenrir1121
    Начни с документации
    эта статья тык

    Вам внутри вашего же примера дан нужный код
    def my_after(error):
        coro = some_channel.send('Song is done!')
        fut = asyncio.run_coroutine_threadsafe(coro, client.loop)
        try:
            fut.result()
        except:
            # an error happened sending the message
            pass

    coro - асинхронная функция
    Ответ написан
  • Есть ли для Python простые в использовании ORM с поддержкой asyncio и type hints?

    fenrir1121
    @fenrir1121
    Начни с документации
    Алхимия де-факто стандарт. Можно попробовать врапперы над ней, хотя все тоже с проблемами. Eсть подозрения, что сейчас алхимия и пайдентик апнулись до 2 версии и оживет sqlmodel.

    Что до списка выше есть вот такой разбор от контрибьютора черепашки. Можно глянуть по цифрам и выводам, с чем-то из ограничений все равно приходится мириться.
    Ответ написан
    2 комментария
  • Как скачивать файлы Telegram через php более 20МБ?

    fenrir1121
    @fenrir1121
    Начни с документации
    Поднимать собственное хранилище и хранить в нем файлы какого угодно размера. Телеграм, очевидно, не заинтересован, чтобы любой желающий использовал его как файлопомойку через их же API.

    P.S. прочитайте правила и удалите все теги, кроме Telegram, они не имеют отношения к вопросу.
    Ответ написан
    Комментировать
  • Я неправильно добавляю кнопки в сообщение. Как правильно?

    fenrir1121
    @fenrir1121
    Начни с документации
    Посмотрите этот пример. Каждый ряд это отдельный список
    Ответ написан
    Комментировать
  • Хочу сделать мьют на discord.py duration reason?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Сам мут.
    @bot.command
    async def mute(ctx, member: discord.Member):
        await member.edit(mute=True)

    Чтобы он был на время реализуйте отложенную задачу, которая будет его снимать. Для небольших периодических задач у дискорда есть свой ext.tasks, но чтобы задачи не исчезали в случае перезапуска бота нужна своя реализация с хранением данных в БД.
    Ответ написан
    Комментировать