Мне нужно в дискорд вывести некоторую информацию в виде среза статистики. Как вариант создать несколько каналов, залочить их и средствами бота, обновлять имя канала с какой-то периодикой новыми метриками. Обновлять я буду инфу по количеству нод в проекте 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