DISCORD.PY ИНФО БОТ
Мне нужно в дискорд вывести некоторую информацию в виде среза статистики. Как вариант создать несколько каналов, залочить их и средствами бота, обновлять имя канала с какой-то периодикой новыми метриками. Обновлять я буду инфу по количеству нод в проекте noder.one. Сам проект на джанго, но связку именно в среде джанго делать наверное нет смысла, поэтому опишу здесь обособленный вариант.
Первым делом идем https://discord.com/developers и создаем приложение.
Далее, проваливаемся в наше приложение, и слева, в разделе Bot, добавляем бота.
Сохраняем токен к себе, через него мы будем взаимодействовать с каналом. Если токен не появился при первичном добавлении, то жмем на reset token.
Теперь нам осталось авторизовать нашего бота у себя на канале, для этого заходим в раздел OAuth2 в левом меню и в подменю выбираем URL Generator. В окне, в разделе Scopes выбираем чекбокс bot, в разделе Bot permission выбираем Administrator. Если ваш бот будет выполнять строго определенные функции и вы не собираетесь расширять функционал, то я настоятельно рекомендую выбрать точечно для него права. После проделанной операции, в поле Generated url будет ссылка по которой необходимо пройти и авторизовать вашего бота на канале.
Создаем проект, окружение и устанавливаем небходимые пакеты (эта часть может отличаться вашей)
mkdir ./discord_bot cd discord_bot python -m venv .venv source .venv/bin/activate pip install discord.py
Создаем наш файл с ботом, и записываем следующий код:
import discord import asyncio discord_channel_id = 0000000000000 discord_bot_token = "TOKEN" discord_timeout = 60 class Client(discord.Client): def __init__(self, *, loop=None, **options): super().__init__(loop=loop, **options) self.loop.create_task(self.update_count_user_task()) async def on_ready(self): print('Loged in as: {0}'.format(self.user)) async def update_count_user_task(self): await self.wait_until_ready() while not self.is_closed(): info_channel = self.get_channel(discord_channel_id) await info_channel.edit(name="new_name_channel") await asyncio.sleep(discord_timeout) client = Client() client.run(discord_bot_token)
discord_channel_id = идентификатор канала который будем обновлять
discord_bot_token = токен бота, сохраненный ранее
discord_timeout = сколько секунд курим между обновлениями
Перед тем как запускать, необходимо создать канал на своем сервере и получить его идентификатор (ID можно получить нажав правой кнопкой мыши на канале с включенным режимом разработчика в настройках). Данный пример демонстрирует, как легко можно собрать простенького бота для иформирования пользователей на своем сервере дискорда. github