Задать вопрос
  • Disnake | Как корректно использовать UserCommands?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    после установки бота на учётную запись команды не отображаются
    При чем тут установка бота? Где не отображаются?
    UserCommand это команды, выполняемые через контекстное меню -> Приложения.

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

    Vindicar
    @Vindicar
    RTFM!
    Почитать про asyncio.create_task() и как им пользоваться.
    Создаёшь таск при старте бота (читаем доки на диснейк как реагировать на старт бота), в таске крутишь while True: в комбинации с asyncio.sleep(), пока не наступит нужный момент. Затем делаешь что нужно, и снова ждёшь.
    Оговорка 1

    1. Сохрани результат create_task() в переменную (глобальную или атрибут класса бота, если у тебя класс). Иначе со временем сборщик мусора соберёт объект задачи и задача прибьётся.
    2. Перед запуском фоновой задачи проверяй, а не запущена ли она уже. Вроде как on_startup() может вызываться неоднократно при некоторых обстоятельствах.
    3. При выходе из бота берешь этот объект задачи и делаешь что-то типа
    my_bg_task.cancel()
    try:
        await my_bg_task
    except asyncio.CancelledError:
        pass

    чтобы дать фоновой задаче спокойно завершиться.

    Оговорка 2

    Если у тебя только одна задача с ожиданием, то можно ждать самому, через asyncio.sleep(). В противном случае может пригодиться aioschedule или подобная библиотека. Тогда в фоновой задаче крутишь рабочий цикл этой библиотеки, а свои задачи планируешь уже через неё.
    Ответ написан
    1 комментарий
  • Как сделать оповещение об отключении бота если он на хостинге?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    С текущими вводными разве что идти от обратного: постоянно слать пинг вроде "я живой". Если пинга нет, значит отключен.
    Для полноценных оповещений, как верно отметил Shandy вам нужен второй сервер, который будет заниматься мониторингом первого, в связи с чем вопрос, а зачем вам это нужно? Примерно любой хостинг дает аптайм в 99+%, что за волшебный хостинг, который отключает сервер.
    Ответ написан
    2 комментария
  • Disnake | Python | Реализация "Формы" как это сделать?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Реализация «Формы» как это сделать?
    Открыть документацию и посмотреть

    Реализация в плане кода. Подойдёт простой пример создания "Формы"
    Ну ладно, откроем её
    вместо тебя
    import asyncio
    import os
    
    import disnake
    from disnake.ext import commands
    
    bot = commands.Bot(command_prefix=commands.when_mentioned)
    
    class MyModal(disnake.ui.Modal):
        def __init__(self) -> None:
            components = [
                disnake.ui.TextInput(
                    label="Name",
                    placeholder="The name of the tag",
                    custom_id="name",
                    style=disnake.TextInputStyle.short,
                    min_length=5,
                    max_length=50,
                ),
                disnake.ui.TextInput(
                    label="Content",
                    placeholder="The content of the tag",
                    custom_id="content",
                    style=disnake.TextInputStyle.paragraph,
                    min_length=5,
                    max_length=1024,
                ),
            ]
            super().__init__(title="Create Tag", custom_id="create_tag", components=components)
    
        async def callback(self, inter: disnake.ModalInteraction) -> None:
            tag_name = inter.text_values["name"]
            tag_content = inter.text_values["content"]
    
            embed = disnake.Embed(title=f"Tag created: `{tag_name}`")
            embed.add_field(name="Content", value=tag_content)
            await inter.response.send_message(embed=embed)
    
        async def on_error(self, error: Exception, inter: disnake.ModalInteraction) -> None:
            await inter.response.send_message("Oops, something went wrong.", ephemeral=True)
    
    @bot.slash_command()
    async def create_tag(inter: disnake.CommandInteraction):
        await inter.response.send_modal(modal=MyModal())
    
    @bot.event
    async def on_ready():
        print(f"Logged in as {bot.user} (ID: {bot.user.id})\n------")
    
    
    if __name__ == "__main__":
        bot.run(os.getenv("BOT_TOKEN"))
    Ответ написан
    1 комментарий