Discord.py инфо бот
Read Time:1 Minute, 59 Second

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *