discord_appdev

Простой чат-бот для Discord на Python

Сегодня рассмотрим пример создания простого чат-бота для Discord на языке Python 3 с использованием популярной библиотеки discord.py. Данный чат-бот по команде будет присылать стоимость криптовалюты биткоин (Bitcoin), которую будет узнавать с сайта coinmarketcap.com.

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

Что потребуется для из средств разработки:

  • Python 3.4.2+ (в Ubuntu 16.04 в коробке сразу идет Python 3.5.2)
  • Pip3 (менеджер пакетов для установки библиотек, в версиях Python 3.4+ входи в коробочную версию)
  • Любой текстовый редактор

В случае, если не установлен pip3, то установка в Ubuntu выглядит так:

$ sudo apt-get install python3-pip

Далее ставим главную библиотеку discord.py — обертка над API Discord для Python 3:

$ pip3 install discord.py

В Windows команда для терминала cmd выглядит также. Но если не настроены пути, то будет появляться ошибка. Тогда можно написать полный путь до pip3 примерно так:

C:\_ПУТЬ_ДО_ПАПКИ_PYTHON3\Tools\Scripts\pip3.exe install discord.py

Уже почти все сделано, осталось написать код. Создаем пустой файл с названием, например, discordpy-chatbot.py. Открываем любым текстовым редактором и вставляем туда код. На Github я привел программный код нашего чат-бота. Вот ссылка, ниже gist:

Осталось изменить значение переменной DISCORD_BOT_TOKEN, в которую необходимо сохранить токен вашего Discord-приложения (чат-бота). Чтобы узнать свой токен, необходимо перейти по адресу https://discordapp.com/developers/applications/me, выбрать в списке необходимый чат-бот или создать новый, и на странице настроек приложения в блоке «Bot» нажать на ссылку «click to reveal», где раскроется токен вашего приложения. Его и нужно занести в переменную DISCORD_BOT_TOKEN:

discord_bot_token

Все готово. Сохраняем файл со скриптом и запускаем чат-бот:

$ python3 discordpy-chatbot.py

После запуска на вашем сервере Discord, куда был добавлен чат-бот (а как добавлять своих ботов на свой сервер я писал в этой статье), можно писать команду:

!btcprice

на что бот вам любезно ответит текущей ценой за 1 биткоин:

discrod_btcprice

12 thoughts on “Простой чат-бот для Discord на Python

  1. Я может чего-то не понимаю, но с какой стати мне IDLE пишет, что в модуле discord нет атрибута Client

    • Столкнулся с такой же ситуацией, удалось решить путем замены python 3.7 на python 3.6

  2. Как поставить бота на удаленный сервер, чтобы бот работал постоянно?

    • Достаточно запустить скрипт бота непосредственно на сервере, например, как описано в статье. В самом простом случае на сервере необходимо установить Python 3, pip3, библиотеку discord.py и просто запустить скрипт в фоновом режиме. Либо можно воспользоваться сервисами, например, Heroku, которые позволяют очень просто запускать пользовательские скрипты на своих серверах.

  3. Здравствуйте, появилась хотелка, запустить бота на своем сервере, на котором крутится сервер DontStarveTogether, для возможности мониторинга его состояния, запуска, перезапуска, обновления, отправки команд непосредственно в сервер игры. Т.е. нужно получать некоторые данные с машины. С ботом дискорда только начал знакомиться, что для этих целей подойдет больше, лучше, где искать информацию?

    • Здравствуйте!
      К сожалению, я вряд ли смогу посоветовать что-то конкретное непосредственно для серверов Dont Starve Together. Но могу попытаться описать вариант общего решения.
      Реализовать управление игровым серверным приложением (как и почти любым другим), на мой взгляд, вполне возможно с использованием дискорд бота, поскольку в данном случае он лишь выполняет функции для передачи данных/команд из дискорд чата в приложение на сервере, который как-то обрабатывает эти сообщения. Можно использовать Python библиотеку discord.py, которая используется в данной статье. Можно использовать любую другую библиотеку на другом языке. С ботом никаких других проблем быть не должно. Но бота реализовывать надо будет самостоятельно.
      Но основная проблема это организация связи приложения дискорд бота с программой сервера игры (если на одной машине запущен и бот, и сервер игры). Если серверное ПО для Dont Starve Together позволяет выполнять процедуры средствами терминала (и скорее всего позволяет), то самый простой вариант это вызывать эти CLI команды из приложения. Если делать бота на Python, то можно использовать модули os.system или subprocess (стандартные Python модули). Как ими пользоваться — можно найти в сети и на русском языке. То есть схема простая:
      1) В дискорд чат пользователь отправляет команду;
      2) Приложение бота на удаленном сервере получает сообщение с командой и обрабатывает его;
      3) Приложение бота определив, что за команда пришла, пытается связаться с сервером игры, например, используя модуль os.sysem, вызвая команды CLI.
      4) После успешного выполнения/ошибки бот отправляет в чат дискорда результат.

  4. Здравствуйте. Хочу создать себе бота-оповесника,который будет писать сообщение о новом видео или стриме на Ютуб. Можете помочь?

  5. Выдает следующие ошибки, я как новичек в питоне не очень понимаю что они означают и как их решить.
    C:\Users\mrgoo\AppData\Local\Programs\Python\Python37-32\python.exe C:/Users/mrgoo/.PyCharmCE2018.2/config/scratches/botdiscrod.py
    Traceback (most recent call last):
    File «C:/Users/mrgoo/.PyCharmCE2018.2/config/scratches/botdiscrod.py», line 1, in
    import discord
    File «C:\Users\mrgoo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\__init__.py», line 20, in
    from .client import Client, AppInfo, ChannelPermissions
    File «C:\Users\mrgoo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\client.py», line 38, in
    from .state import ConnectionState
    File «C:\Users\mrgoo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\state.py», line 36, in
    from . import utils, compat
    File «C:\Users\mrgoo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\compat.py», line 32
    create_task = asyncio.async
    ^

    • Данная ошибка, скорее всего, возникает из-за вашей версии Python 3.7. Попробуйте использовать версии Python 3.4 — 3.6.

  6. При попытке активировать бота появляется такая ошибка
    c:\python34\bot.py $ python3 discordpy-chatbot.py
    File «C:\python34\bot.py», line 17
    async def on_ready():
    ^
    SyntaxError: invalid syntax

Добавить комментарий для Антон Отменить ответ

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">