Закрытие соединения с ботом Discord без завершения командной строки (discord.py)
- Post author: admin
- Запись опубликована: 24 января, 2022
- Post category: Вопросы по программированию
#python #discord.py #python-asyncio
Вопрос:
Цель: Добавить дополнительные команды, не прерывая другие команды
Я искал способ развернуть обновления, не прерывая поток моего бота, так как у него есть некоторые функции asyncio, которые выполняются через некоторое время после вызова функции
Я пробовал: ожидание клиента.выход из системы()
Выше будет выведен из системы бот, но также закроется командная строка. Я нашел это на discord.py документы.
Я использую Windows 10 с Python версии 3.9
Любая помощь будет признательна. Заранее спасибо.
1. 1. Что вы хотите сделать после этого? Потому что нет реальной возможности просто закрыть соединение, а затем просто открыть окно 2. Можете ли вы дать нам ту часть кода, в которой вы хотите это сделать?
БОТ ДЛЯ СЕРВЕРА ДИСКОРД | Python, Disnake
2. Зачем тебе вообще это нужно? Какова цель этого?
3. Я пытаюсь выполнить команду перезагрузки для бота, если вы запутались.
4. Если вы хотите выпускать обновления, не прерывая поток вашего бота, рассмотрите возможность изучения винтиков и динамической загрузки кода. Вы можете сгруппировать функции в класс (cog) и иметь команду типа ! перезагрузите имя, которое перезагрузит этот винтик с обновленным кодом.
Вам не нужно будет даже прикасаться к команде или прерывать соединение.
Ответ №1:
Создайте новый файл python в том же каталоге с именем startup.py например. Внутри этого файла выполните следующие действия:
import os import time time.sleep(5) os.system(‘python YOUR_BOTS_FILE_NAME.py’)
Затем в файл, где находится код вашего бота, добавьте новую команду, которую мы будем называть, например, перезапуск:
В startup.py файл, ос ждет 5 секунд, пока файл вашего бота выключится, а затем включает его. Команда перезапуска в файле вашего бота запускает файл запуска, а затем отключается.
Убедитесь, что автором сообщения являетесь вы, чтобы люди не перезапускали вашего бота.
Ответ №2:
Я сам разрабатываю бота и сам создал shutdown команду, которая отключает бота без использования терминала.
Сначала я бы добавил код, а затем объяснил его.
Код:
Я не добавил ни has_permissions одного, так как он мне не нужен, когда я использую свой идентификатор discord для ограничения его использования.
Объяснение:
- Я определил переменную, myid которая равна идентификатору моей учетной записи discord. Проверьте здесь, как получить идентификатор пользователя:
- Я добавил условие, что если идентификатор пользователя, который использовал эту команду, равен myid или если это не так. Если он равен идентификатору моей учетной записи, то он отключит бота, иначе он покажет пользователю ошибку.
- Я просто использовал await MyBot.logout() , который выводит вас из системы и отключает.
Ответ №3:
Вы можете поместить свой код в while True цикл.
ChatGPT OpenAI в Discord на Python / Пишем Discord-бота ChatGPT на Питоне
while True: client = commands.Bot(command_prefix=’!’) async def restart(ctx): await client.logout() client.run(‘token’)
Ответ №4:
Вы могли бы просто заменить текущий процесс тем же процессом, начав все заново. Вам нужно предварительно очистить буферы и закрыть указатели на файлы, но это легко сделать:
import os import sys from typing import List def restart(filepointers: List): # this cleanup part is optional, don’t need it if your bot is ephemeral # flush output buffers sys.stdout.flush() sys.stderr.flush() # flush and close filepointers for fp in filepointers: os.fsync(fp) fp.close() # replace current process os.execl(*sys.argv)
Затем просто вызовите эту функцию с помощью своего бота, как вы бы сделали(из того же файла).
Ответ №5:
Если вы хотите обновить свой код, вам необходимо перезапустить программу.
Ответ №6:
Если вы не хотите прерывать текущий процесс, а вместо этого просто хотите выполнить горячую перезагрузку различных функций, вам может потребоваться изучить discord.py функцию расширений. Использование расширений и винтиков позволит вам включать/отключать/перезагружать определенные функции в вашем боте, не останавливая его (что должно поддерживать выполнение задач). Это также встроенный метод горячей перезагрузки.
Расширения и винтики обычно используются вместе (хотя это и не обязательно). Вы можете создавать файлы для каждой группы похожих команд, которые вы хотите перезагрузить вместе.
Следующие примеры кода должны быть интегрированы в вашу настройку. Вероятно, вы также захотите добавить обработку ошибок и проверки ввода, но это должно дать вам представление о том, что происходит. Для получения подробного объяснения или вариантов метода ознакомьтесь с документами.
# main.py # . bot = commands.Bot( # . ) bot.load_extension(«info») bot.run(token)
to use, you might do something like `prefix!reload info`
Вам также может понравиться
добавление класса в javascript / jquery при выборе определенного часового пояса в пользовательском интерфейсе
7 февраля, 2023
Правильная ли это архитектура для нашей мобильной игры MMORPG?
11 марта, 2023
Как получить данные из cloud firestore, затем отфильтровать их, сопоставить, а затем вернуть?
28 февраля, 2023
- О нас
- Онлайн игры
- Конвертеры
- Base64 конвертер онлайн
- Оформление кода JavaScript CSS HTML Онлайн
- URL Encoder (кодировщик) / Decoder (декодировщик) онлайн
- Конвертер регистров
- Рассчитать количество дней между датами
- Генератор ключей и паролей
- Генератор QR кодов
- Преобразование времени
- Преобразование микросекунд в секунды
- Преобразование микросекунд в миллисекунды
- Преобразование миллисекунд в микросекунды
- Преобразование миллисекунд в секунды
- Преобразование миллисекунд в минуты
- Преобразование миллисекунд в часы
- Преобразователь миллисекунд в дату
- Преобразование секунд в миллисекунды
- Преобразование секунд в минуты
- Преобразование секунд в часы
- Преобразование секунд в дни
- Преобразование минут во время
- Преобразование минут в миллисекунды
- Преобразование минут в секунды
- Преобразование минут в часы
- Преобразование часов в миллисекунды
- Преобразование часов в секунды
- Преобразование часов в минуты
- Преобразование часов в дни
- Преобразование дней в часы
- Преобразование из часы в недели
- Конвертация из недели в часы
- Через несколько часов калькулятор
- Преобразование времени AM/PM в 24-часовое
- Преобразование Военного Времени
- Время до десятичного калькулятора
- Безопасность
- Финансы
- Энциклопедия
Источник: programbox.ru
Как в discord.py сделать функцию shutdown?
В смысле «отключаю сервер»?
Выкидываете бота с сервера?
Удаляете сервер, на котором бот?
Останавливаете программу-бота?
Если речь идет о выключении машины, на которой лежит бот, то вам нужно будет зарываться в документацию ядра ос, чтобы найти способ назначить программу, выполняющуюся перед началом отключения системы
Vindicar, Остановка программы
Решения вопроса 1
Если допустить, что ваш сервер линуксовый, и он при завершении работы вызывает необходимые сигналы — ловить эти самые сигналы.
https://docs.python.org/3/library/asyncio-eventloo. (достать eventloop бота можно через bot.loop)
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 2
Начинающий программист.
Никак, так как при выключении сервер выключает все программы.
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Если речь об остановке программы, то гипотетически может пригодиться модуль atexit.
Но нужно иметь ввиду, что этот модуль не поможет если процесс убит сигналом KILL (Unix системы) или через TerminateProcess() (Windows системы).
Кроме того, нет гарантий, что после вызова atexit-обработчика бот проживёт достаточно долго, чтобы на самом деле отправить сообщение по сети, а не только «принять к сведению и поставить в очередь».
Так что скорее стоит задуматься, что именно вы пытаетесь сделать, и зачем.
Источник: qna.habr.com
Остановка бота discord.py
Стоит задача: нужно при запуске программы запускать бота discord, генерировать ссылку-приглашение и останавливать бота.
Есть ли стандартные (валидные) методы остановки бота? В API Reference найти его не удалось =/ Упрощённый пример бота:
Отслеживать
задан 14 июн 2020 в 11:16
4,487 2 2 золотых знака 8 8 серебряных знаков 28 28 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Попробуй такой вариант:
Отслеживать
ответ дан 15 июн 2020 в 13:53
user374627 user374627
Спасибо за помощь ^ -^
15 июн 2020 в 14:25
- python
- discord.py
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник: ru.stackoverflow.com