Как работают боты в дискорде
Перейти к содержимому

Как работают боты в дискорде

  • автор:

Создание бота на основе discord.py. Часть 1

Это первая статья про создание бота для Discord. В конце статьи находятся ссылки на следующие части, со временем они будут дополняться. Статьи следуют друг за другом, без каких-либо «информационных дыр». Если нашли опечатку или неточность, отпишите о проблеме в комментариях или в личных сообщениях, максимально оперативно всё поправим! А теперь переходим непосредственно к созданию бота.

В данной части

  1. Создание тестового сервера
  2. Включение режима разработчика
  3. Создание приложения и получение токена
  4. Добавление бота на сервер
  5. Установка библиотеки discord.py
  6. Первые строчки кода

Создание сервера

Гайд будет максимально подробный, поэтому и начинать будем с создания тестового сервера. Зачем он нужен? Лишь для вашего удобства и безопасности, если у вас уже есть большой сервер, тем более не стоит сразу добавлять на него разрабатываемого бота. Никто не защищён от багов и дыр в безопасности.

  1. Заходим в дискорд
  2. Слева видим список серверов, листаем в самый низ до кнопки «Создать сервер«.
  3. Создаём сервер по любому из предложенных шаблонов.

Включаем режим разработчика

Это необязательно, но очень желательно. В режиме разработчика появляются некоторые полезные элементы для удобства разработки, например, в меню пользователя появляется пункт, который позволяет скопировать его ID.

Чтобы включить этот режим, заходим в настройки.

В категории «Настройки приложения» ищем «Расширенные«.

И включаем режим разработчика.

Получение токена

Для начала нам нужно зайти на страницу создание приложений и нажать New Application.

После этого вам предложат назвать ваше приложение (Потом можно будет изменить).

Создание приложени

После создания, попадаем на страницу настройки приложения. В меню выбираем «Bot«.

На данной странице нажимаем на «Add Bot«. Скопируем токен и сохраним его.

Так же, сразу можно выдать дополнительные разрешения боту, чтобы потом об этом не задумываться.

Добавление бота на сервер

В меню ищем пункт OAuth2 –> URL Generator.

В поле SCOPES выбираем bot и applications.commands. В появившемся ниже поле выбираем Administrator, это более удобно для тестирования. Но когда бот будет работать в продакшене, лучше выставлять только те права, которые правда нужны, потому что никто не защищён от потери токена, а с правами администратора это может стать очень большой проблемой.

Копируем появившеюся ниже ссылку и вставляем в адресную строку браузера. Если у вас не выполнен вход в браузере, его необходимо произвести. После чего выбираем тестовый сервер из списка и нажимаем «Продолжить» и далее «Авторизовать«.

Ура! Наш бот на тестовом сервере!

Установка библиотеки

Для начала нужно установить python, данный этап не расписан, но желательно установить версию 3.10 (Последняя версия на момент написания 3.10.5). Если у вас Windows, для проверки можете использовать следующую команду

py --version

В ответ получите версию вашего python. Устанавливать будем не стабильную, а разрабатываемую версию, для этого пропишем следующую команду. (Это можно делать уже внутри проекта). Хотя некоторые IDE устанавливаю git вместе с собой, можете скачать его отдельно.

py -m pip install git+https://github.com/rapptz/discord.py

Если всё же хотите установить стабильную, релизную версию, пропишите следующую команду.

py -3 -m pip install -U discord.py py -3 -m pip install -U discord.py[voice]

Подробнее про установку библиотеки и саму библиотеку можно прочитать тут.

Первые строчки кода

Пришло время писать код! Программирование в статьях будет происходить в PyCharm, хоть это и довольно тяжёлая IDEA, она удобная и бесплатная для студентов.

Не советую создавать проект через внутренний интерфейс, может появиться множество ненужных папок и файлов, вместо этого создадим папку проекта вручную и откроем как пустой проект.

Для этого заходим в PyCharm, далее File –> Open.

P.s. Не обращайте внимания на другую тему IDE.

В появившемся окне ищем созданную папку, выбираем её и нажимаем «Ok«. Обратите внимание на то, что нужно просто нажать по папке, а не проваливаться в неё.

Если PyCharm автоматически не создал main.py, создайте его вручную.

Вставляем код ниже и запускаем.

import discord # Подключаем библиотеку from discord.ext import commands intents = discord.Intents.default() # Подключаем "Разрешения" intents.message_content = True # Задаём префикс и интенты bot = commands.Bot(command_prefix='>', intents=intents) # С помощью декоратора создаём первую команду @bot.command() async def ping(ctx): await ctx.send('pong') bot.run('token') 

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

Идём в дискорд и используем нашу первую команду.

Немного объясним данную структуру. Поскольку это обычная команда, вся информация хранится в ctx(Переменная одноимённого класса). Она имеет следующие поля:

['args', 'author', 'bot', 'channel', 'cog', 'command', 'command_failed', 'guild', 'invoked_parents', 'invoked_subcommand', 'invoked_with', 'kwargs', 'me', 'message', 'prefix', 'subcommand_passed', 'valid', 'voice_client']

И следующие команды:

['fetch_message', 'history', 'invoke', 'pins', 'reinvoke', 'reply', 'send', 'send_help', 'trigger_typing', 'typing']

Если вы знакомы с синтаксисом языка, то данный список можно получить с помощью встроенной функции dir.

print(dir(ctx))

На более правильно прочитать документацию про Context.

Заключение

Сразу отвечу всем комментаторам. Да — подобных статей море, в том числе есть официальная документация. Но поскольку в моих планах есть создать серию статей, я хотел бы, что бы в них было описано всё, начиная с самых азов.

И небольшое примечание. Статьи строятся на основании того, что у вас есть опыт и знания программирования на python.

Боты

Discord позволяет пользователям создавать ботов и приглашать их на сервера. Discord создал свой уникальный API, который позволяет пользователям создавать приложения, взаимодействующие напрямую с сервером. Вы можете просмотреть документацию по API здесь.

Существует сервер сообщества Discord API, к которому можно получить доступ здесь .

  • 1 Серверные боты
  • 2 Каталоги ботов
  • 3 Селфботы
  • 4 Пользовательские боты

Серверные боты

Самым распространённым типом ботов являются серверные боты. Серверные боты имеют выделенные учётные записи ботов, которые отличаются от учётных записей пользователей и функционируют в основном на серверах. На Discord существуют сотни серверных ботов, которые выполняют разные функции. Чтобы пригласить бота, нажмите на ссылку авторизации, выберите сервер, откажитесь или разрешите ему указывать разрешения на странице и нажмите «Авторизовать». Чтобы удалить бота с вашего сервера, просто кикните или забаньте его, как любого другого пользователя.

У аккаунтов ботов есть тег бота рядом с их именем. Если вы хотите создать своего собственного серверного бота, вам нужно зарегистрировать его через страницу приложения Discord. Нажмите здесь для доступа к странице приложений.

Каталоги ботов

Существует множество сайтов, где можно найти Discord-ботов на свой вкус и пригласить их.

Ниже перечислены самые основные мониторинги ботов (самые удобные и популярные):

  • bots.server-discord.com (RU)
  • boticord.top (RU)
  • top-bots.xyz (EN/RU)
  • discordserver.info/bots (RU/EN)
  • top.gg (EN)
  • discord.bots.gg (EN)
  • bots.ondiscord.xyz (EN)
  • botsfordiscord.com (EN)
  • discordbotlist.com (EN)
  • discord.boats (EN)

Полный список каталогов Discord ботов можно найти на https://botblock.org

Селфботы

Селфботы (англ. Self Bots) — это когда пользователь использует Discord API для улучшения своей учётной записи и предоставления им некоторых автоматических возможностей, таких как самостоятельная проверка связи и встраивание. Селфбот работает в вашей учётной записи (не через страницу приложений) и может отправлять вам сообщения. Селфботы противоречат политике OAuth Discord API и могут привести к удалению учётной записи, если она найдена. Селфботы должны отвечать только на ваши команды, в противном случае это считается пользовательским ботом (см. ниже). Чтобы использовать Selfbots, вам нужен ваш токен, который можно найти на консоли. Не давайте никому свой токен пользователя. Если кто-то получает ваш пользовательский токен, он может нанести серьёзный ущерб вашей учетной записи, включая чтение сообщений, отправку сообщений и беспорядок на любом сервере, на который у вас есть разрешения.

Пользовательские боты

Пользовательские боты — полностью функционирующие боты, запускаемые через обычную учётную запись. Они противоречат Условиям предоставления услуг Discord, однако можно использовать на одном, абсолютно пустом сервере (как в ознакомительных целях). Если же вы столкнулись с использованием пользовательских ботов в публичных условиях, сообщите об этом сюда.

JuniperBot

JuniperBot — бот, который поможет вам с системой модерации, уровнями, кастомными командами.

  • 1 Описание
  • 2 Функционал бота
    • 2.1 Модерирование
    • 2.2 Аудит
    • 2.3 Публикации и подписки
    • 2.4 Рейтинг участников
      • 2.4.1 Получение опыта
        • 2.4.1.1 Текстовое общение
        • 2.4.1.2 Голосовое общение

        Описание [ ]

        Логотип бота представляет из себя упрощённое изображение лисей головы, повёрнутой направо.

        Описание бота разработчиком:

        JuniperBot — многофункциональный, полностью настраиваемый бот для платформы Discord с множеством полезных и только самых необходимых возможностей для большинства серверов!

        Бот имеет как бесплатный функционал, так и платное дополнение(149₽/мес или 349₽/мес. Отличие лишь в количестве серверов, которые может подержать подписчик.).

        Функционал бота [ ]

        Модерирование [ ]

        Бот может удалять сообщения по различным фильтрам, настроенными через панель управления и выдавать наказания. Имеет систему предупреждений, по которой он также выдаёт наказания.

        Команды

        Команда Что делает Риск
        !мьют Заглушает участника в определённом канале или по всему серверу М
        !размьют Снимает с участника мьют М
        !бан Выгоняет участника с сервера и блокирует ему доступ М
        !разбан Снимает с участника блокировку М
        !кик Выгоняет участника с сервера М
        !пред Выдаёт участнику предупреждение М
        !снятьпред Снимает с участника действующее предупреджение М
        !сброспред Снимает с участника все действующие предупреждения или со всех участников М
        !очистить Удаляет несколько сообщений в чате, где была применена эта команда М
        !слоумод Устанавливает задержку в чате между сообщениями М
        !времроль Выдаёт участнику роль на некоторое время М
        !цвет Выдаёт участнику цветную роль ( убрана ) У
        !преды Показывает участнику список действующих предупреждений У

        *М — только для модераторов, У — для участников

        Аудит [ ]

        Бот может сохранять действия участников на сервере, используя вебхуки. Однако, некоторые аспекты действий не сохраняются(например, кто изменил роль или кто удалил сообщение)

        Пример аудита

        Публикации и подписки [ ]

        Бот может делать публикации на сервер с социальных сетей, таких как YouTube, Twitch или VK.

        Рейтинг участников [ ]

        Бот может выдавать уровни за рейтинг. Рейтинг может считаться ботом в текстовых и голосовых каналах. Однако, в голосовых каналах опыт может считаться только на сервере с бонусом.

        Получение опыта [ ]
        Текстовое общение [ ]

        Раз в минуту за написанное сообщение участник может получить от 15 до 25 EXP. Если сервер имеет бонус, то администраторы сервера могут изменить множитель EXP c 0,5 по 5,0(кратно 0,5).

        Голосовое общение [ ]

        Если вы находитесь в голосовом канале на сервере, где активен бонус, то вы будете получать EXP, исходя из следующей формуле:

        e x p = 6 ∗ c o u n t ∗ m u l t i p l i e r

        • count — количество активных участников в голосовом канале
        • multiplier — множитель опыта, который выставлен администраторами сервера(от 0,5 до 5,0)

        Ещё немаловажными факторами получения EXP за голосовую связь являются то, что:

        1. Не менее 2-х участников с включённым микрофоном и с включённым звуком
        2. Участник не отмечен как БОТ

        Опыт за голосовую связь будет засчитан, если два фактора будут учтены и участник отключится или перейдёт в другой голосовой канал. И неважно, сколько вы общались: несколько часов или 30 секунд.

        Уровни [ ]

        Не в зависимости, от того, каков стоит множитель опыта на сервере, вы будете получать уровни. Ниже предоставлена таблица с 1-го по 15-ый уровни:

        Текущий уровень Опыт до следующего Необходимо опыта Время до сдедующего
        0 100 0
        1 55 100
        2 65 155
        3 75 220
        4 85
        5 95
        6 105
        7 115
        8 125
        9 135
        10 145

        Дискорд Боты

        Это Дискорд-боты, которые используются на сервере. Некоторые из них сделаны конкретно для администраторов, иные же могут использоваться игроками.

        • 1 Введение
        • 2 Activities
        • 3 Captcha.bot
        • 4 Carl-Bot
        • 5 FGMusic
        • 6 Lofi Radio
        • 7 GameStatus
        • 8 Member Counter
        • 9 ServerStats
        • 10 Репорт Бот
        • 11 FGApi
          • 11.1 Привязка дискорда к майнкрафту
          • 12.1 Автомодерация
          • 12.2 Музыка
            • 12.2.1 Доступные команды:
            • 12.2.2 Заикается/отключается музыка или радио. Что делать?
            • 12.3.1 Текстовое общение
            • 12.3.2 Голосовая связь
            • 12.3.3 Уровни
            • 12.3.4 Коробка печенек
            • 12.3.5 Лесная Возня
              • 12.3.5.1 Интерфейс
              • 12.3.5.2 Порядок действий
              • 12.3.5.3 Дневное голосование

              Activities

              Все Боты MineLandy

              Позволяет использовать активности в голосом канале. Доступные команды:

              • +help ‣ Показать все доступные команды.
              • +youtube ‣ Запустить YouTube Together в голосовом канале.
              • +game ‣ Запустить Мини-Игры в голосовом канале. Доступные игры: Покер; Шахматы; Betrayal; Fishington

              Captcha.bot

              Служит для защиты дискорд сервера от дудосов твинками. Проверка капчей осуществляется на сайте. Рекомендуется использование на пк. Жителям РФ и РБ рекомендуется включить VPN. В случае ошибки с верификации писать @������������#0001.

              Carl-Bot

              Выполняет административную функцию, когда необходимо запустить голосование на сервере. Доступная команда для участников сервера:/fun [стиль] текст.

              FGMusic

              Музыкальный бот для администрации сервера. Недоступен для всех участников.

              Lofi Radio

              Музыкальный радио-бот, транслирующий музыку с ютуб-канала LofiGirl.

              /play — запускает бота в голосовом канале

              GameStatus

              Показывает сколько игроков играет в данный момент, в канале статистика.

              Отображает статистику онлайна сервера за последние 24 часа, а также текущий онлайн и статус соединения.

              Member Counter

              Gamestatus

              Показывает сколько игроков в данный момент в описании канала о-сервере.

              ServerStats

              Отображает количество участников дискорда в категории SERVER STATS.

              Репорт Бот

              Репортбот

              Позволяет участникам сервера создавать тикеты с репортами о нарушениях/неполадках на сервере в канале репорты. Также используется для создания заявок на участие в конкурсах строителей. Принцип работы: участник должен выбрать категорию репорта, заполнить необходимые поля соответствующей информацией, после чего создаётся отдельный канал для этого участника и его репорта.

              FGApi

              Аутентификатор, связывающий аккаунты дискорда и майнкрафта. Служит для синхронизации привилегий и активации двухфакторной аутентификации при заходе на сервер майнкрафта. Для корректной работы в настройках аккаунта дискорда необходимо включить функцию Настройки пользователя — Конфиденциальность — Разрешить личные сообщения от участников сервера

              Привязка дискорда к майнкрафту

              Для привязки аккаунта нужно на майнкрафт сервере Meltarion прописать /discord link и отправить цифры боту в дискорде FGApi#0587

              Команда /discord sync синхронизирует роль в дискорде с привилегией в майнкрафте.

              После привязки вы можете включить двухфакторную аутентификацию /discord 2fa. Двухфакторная аутентификация будет требоваться всегда когда логинитесь (вводите пароль).

              Juniper Bot

              Основной бот на сервере, который выполняет функции автомодерации, музыкального плеера, помощника администратора, внедряет систему уровней и репутации. Все доступные команды можно просмотреть в меню -хелп. Общедоступная страница рейтинга участников на сервере. Большинство немузыкальных команд этого бота доступны для использования только в канале команды боту

              Автомодерация

              Осуществляет автомодерацию по таким категориям: ссылки, скам-ссылки, мат, спам, Caps Lock, спам эмодзи, спам упоминаниями, использование символов Zalgo.

              При нарушении участнику выдаётся предупреждение. После 3-х предупреждений выдаётся мут на 15 минут. После 5-ти предупреждений — на 30 минут. Предупреждения автомодерации длятся от одного часа до одного дня. При муте участницу выдаётся роль Нарушитель, которая не позволяет ему писать, ставить реакции, присоединятся к голосовым каналам.

              Музыка

              Команды музыкального плеера воспринимаются ботом только в канале музыка.

              Доступные команды:
              • -плей — Воспроизвести композицию в голосовом канале
              • -ютуб — Найти что-либо на YouTube
              • -скип — Пропустить текущую воспроизводимую композицию
              • -очередь — Показать очередь воспроизведения
              • -перемешать — Перемешать очередь воспроизведения
              • -продвинуть — Продвинуть композицию как следующую в очереди
              • -удалить — Удалить композицию из очереди воспроизведения
              • -текущая — Показать текущую композицию
              • -повтор — Установить режим повтора
              • -пауза — Поставить воспроизведение на паузу
              • -старт — Продолжить воспроизведение композиции после паузы
              • -стоп — Остановить воспроизведение
              • -громкость — Установить громкость воспроизведения
              • -сюда — Переместиться в голосовой канал участника
              • -сначала — Начать воспроизведение композиции с начала
              • -назад — Перемотать воспроизведение назад
              • -вперед — Перемотать воспроизведение вперёд
              • -позиция — Перемотать воспроизведение на указанную позицию
              Заикается/отключается музыка или радио. Что делать?
              1. Высокая нагруженность музыкального сервера: Степень нагрузки отображается в панели воспроизведения в самом дискорде и на странице Статистики. Если нагрузка менее 80%, проблема не в этом.
              2. Проблемы с соединением до голосового шлюза Discord или его высокая нагруженность: Между Вами и ботом есть узел, называемый голосовым шлюзом. У Discord их несколько и каждый привязан к выбранному в настройках голосового канала Региону. Проблемы могут быть как между шлюзом и ботом, так и между Вами и этим шлюзом. Пробуйте менять регион голосового канала и смотреть будут ли улучшения на каком-нибудь из них (полностью перезапуская при этом воспроизведение музыки).
              3. Проблемы с соединением бота до источника музыки: По независимым от нас причинам имеют место быть проблемы с соединением до источника музыки (YouTube, Яндекс.Музыка, радиостанции) когда сам источник музыки тормозит или нестабильное соединение до него. Проблема может нести как временный, так и постоянный характер и преимущественно для радиостанций.

              Рейтинг участников

              Ниже подробно рассказано о рейтинге участников и о том, как эта механика работает. Каналы срач, AFK и Toxic не дают никакого опыта.

              Текстовое общение

              Каждый раз, когда участник пишет что-нибудь в чат, он получает от 7 до 12 единиц опыта не более раза в минуту. Для ознакомления со своим прогрессом или прогрессом другого участника используется команда «-ранг».

              Голосовая связь

              Опыт за голосовую связь и время голосовой активности начисляются только активным участникам, которые: С включенным микрофоном (не замьючены); С включенным звуком (слышат других); Не боты. Опыт за голосовую связь за одну минуту общения в идеальных условиях рассчитывается по следующей формуле:

              exp = 6 * count * multiplier count — количество активных участников в голосовом канале; multiplier — множитель опыта в настройках панели управления (100% = 1, 200% = 2 и т.д.). 

              В получении опыта за голосовую связь и времени голосовой активности следует учитывать два важных момента: Опыт и время начисляются активным участникам только если в голосовом канале как минимум два активных участника; Опыт является накопительным. Это значит, что за промежуток времени пока общаются три участника, они все получают тройной опыт. Когда один из них выходит, отключает микрофон или звук, то с этого момента оставшиеся два не теряют уже накопленный тройной опыт, а продолжают получать двойной (за двоих).

              Уровни

              Опыт для каждого уровня рассчитывается по следующей формуле:

              exp = 5 * level² + 50 * level + 100 
              Коробка печенек

              Система рейтинга также включает в себя функционал кармы или простой системы накопительной репутации, называемой «Коробка печенек». Это простой счетчик, повысить который можно несколькими способами:

              ��Написать сообщение с обращением к участнику и эмоцией печеньки, например: @Участник �� ��Добавить реакцию печеньки к сообщению этого пользователя. 

              Для предотвращения фарма выдача печеньки от участника к участнику работает только раз в 10 минут.

              Лесная Возня

              Лесная Возня — разновидность командной психологической ролевой игры «Мафия», участники которой — лесные жители. Рекомендуемое число участников 15-20. Участники делятся на две команды: Хищников и Травоядных.

              Интерфейс

              Хищники Волки — стая, по ночам съедающая по зверю. Съеденный выходит из игры. Лиса — живёт отдельно от Волков и не знакома с ними. Каждую ночь ворует запасы еды у какого-либо из лесных зверей (независимо от роли). Если зверь оказывается обворован дважды, еды на зиму у него не остаётся и он уходит жить в соседний лес, оставляя свою команду и игру. ‎ Травоядные Зайцы — самые миролюбивые зверушки. Круглую ночь спят сладким сном и участвуют только в дневных обсуждениях и в голосовании на изгнание. Крот — по ночам роет норки, время от времени попадая в домики к другим зверям, узнавая, к какой команде те относятся. Бобёр — по ночам при желании возвращает обворованному Лисой зверю часть запасов. Бобёр компенсирует весь причинённый зверю Лисой ущерб (не важно, один раз она его обворовывала или два). Если Лиса обворует домик Бобра, с Бобром ничего не случится, сколько бы раз это не произошло.

              Порядок действий

              Игра начинается с короткой ночи, где все узнают свои роли, волки знакомятся друг с другом. В первую ночь волки никого не едят, Лиса никого не обворовывает, Бобёр не делится запасами, а вот Крот уже может прорыть норку и проверить кого-то из зверей. Вскоре объявляется день, и просыпается весь Лес. Звери могут вести обсуждение и голосовать. Затем начинается ночь, когда ночные ходы могут совершать уже все ночные роли. Ночи и дни далее чередуются. Порядок ночных ходов: Волки – Лиса – Бобёр – Крот.

              Дневное голосование

              Днём, обсудив ночные происшествия и попытавшись кто запутать остальных, кто – всё понять, участники голосуют за изгнание из Леса того или иного участника. За чьё изгнание проголосует больше людей, тот и считается изгнанным из Леса. Если в голосовании ничья, то изгнания не состоится. Изгнанный участник выходит из игры, его роль раскрывается.

              Когда в игре останутся участники лишь одной команды, команда объявляется победившей. ‎

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

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