Создаём Discord-бота на Python
Сегодня мы напишем Discord-бота с помощью Python и discord.py. А также посмотрим на примеры ботов.
Всем привет, сегодня мы напишем Discord-бота на Python и discord.py + бонусом посмотрим на примеры ботов. Приступим ?
Перед работой
Перед тем, как начать, вам нужны:
- Python 3;
- discord.py;
- Discord-аккаунт и свой сервер.
Для установки discord.py воспользуйтесь пакетным менеджером:
pip3 install discord.py
Создаём нашего бота
Перейдите на Developer Portal и нажмите на New application.
Вы создали своё приложение, на странице приложение перейдите в Bot >> Add Bot и создайте своего Discord-бота.
Сохраните токен бота! Дальше он нам понадобится!
Если всё прошло успешно, поздравляю, половина дела сделана ?
Добавление бота на сервер
Теперь можно добавить бота на сервер.
Перейдите в OAuth2 >> URL Generator, в Scopes выбираем Bot и ниже — права бота, копируем сгенерированный URL. Вставляем в браузер, и добавляем на наш сервер.
Эхо-бот
Напишем традиционного эхо-бота, и разберём каждую строчку кода.
import discord from discord.ext import commands config = < 'token': 'your-token', 'prefix': 'prefix', >bot = commands.Bot(command_prefix=config['prefix']) @bot.event async def on_message(ctx): if ctx.author != bot.user: await ctx.reply(ctx.content) bot.run(config['token'])
import discord from discord.ext import commands
Нужные нам импорты.
config =
Вспомогательный словарь config в котором храним токен и префикс команд (далее расскажу зачем нужен префикс команд).
bot = commands.Bot(command_prefix=config['prefix'])
Создаём нашего бота, в аргументе передаём префикс.
@bot.event
Декоратор, предназначенный для обработки событий, подробнее здесь.
async def on_message(ctx):
Создаём асинхронную функцию, с параметром ctx, представляет из себя сообщение.
if ctx.author != bot.user:
Проверка, не является ли автор сообщения нашим Discord-ботом. Дело в том, что если бот отправит сообщение, это будет новым событием, и тогда получается цикл.
await ctx.reply(ctx.content)
Отвечаем на сообщение (ctx.reply), в аргументы передаём сообщение (ctx.content).
bot.run(config['token'])
Запускаем нашего бота, в аргументы передаём токен бота.
Надеюсь вы разобрались с кодом, и мы можем переходить далее.
Обработка команд
Перед тем, как обрабатывать команды, нам пригодится наш префикс.
import random import discord from discord.ext import commands config = < 'token': 'your-token', 'prefix': '$', >bot = commands.Bot(command_prefix=config['prefix']) @bot.command() async def rand(ctx, *arg): await ctx.reply(random.randint(0, 100)) bot.run(config['token'])
@bot.command()
Декоратор обработки команд
async def rand(ctx, *arg):
Асинхронная функция rand
await ctx.reply(random.randint(0, 100))
Отвечаем на сообщение, в аргументы передаём случайное число от 0 до 100
Бонус
import random import discord from discord.ext import commands config = < 'token': 'your-token', 'prefix': '$', >bot = commands.Bot(command_prefix=config['prefix']) @bot.command() @commands.has_role("Хозяин") async def rand(ctx, *arg): await ctx.reply(random.randint(0, 100)) bot.run(config['token'])
import discord from discord.ext import commands config = < 'token': 'your-token', 'prefix': '$', >bot = commands.Bot(command_prefix=config['prefix']) @bot.command() async def kick(ctx, user : discord.User(), *arg, reason='Причина не указана'): await bot.kick(user) await ctx.send('Пользователь был изгнан по причине ""') bot.run(config['token'])
Как скопировать чужого чат-бота? Никак, но
Привет VC! Меня зовут Боровков Евгений и я предприниматель. В этой статье попробую ответить на очень частый запрос клиентов, который звучит примерно так: “Оцените разработку вот этого бота: . Сколько будет стоить и сроки.”
Правильно говорит?
Предисловие
Мы в Botcreators занимаемся разработкой чат-ботов уже больше 4 лет, и за это время у нас накопилось большое количество “типовых” запросов от клиентов. Один из них мы попробуем разобрать в этой статье.
Как вы уже поняли из первого абзаца, с запросом “разработайте точно такого-же бота” приходят достаточно часто. И далеко не всегда получается емко объяснить клиенту всю сложность ситуации или донести, что ничего из этой затеи хорошего не выйдет.
В чем же сложность скопировать чужого бота
Чат-бот это некая программа, которая “живет” на сервере. Точно так же как и сайт и любой другой софт. Единственное отличие бота от другого софта это то, что в качестве интерфейса взаимодействия выступает мессенджер или соц. сеть. Это может быть Telegram, VK, WhatsApp (недавняя статья про WABA), Viber (недавняя статья про API Viber), Slack, Skype, Discord, и даже какой-нибудь Там-Там или Одноклассники.
Соответственно, у каждой из платформ\площадок\соц сетей, отличается не просто пользовательский интерфейс, а еще и отличается API. Соответственно, в каждом из мессенджеров будут свои возможности и свои ограничения.
Если говорить проще: пользователь, смотря на бота, понятия не имеет что на самом деле происходит на серверной части. Она на столько изолирована, что без доступа к исходному коду или подробному описанию функционала, очень сложно предположить что там может быть под капотом.
У пользователя нет никакой возможности узнать даже адрес сервера или язык программирования, на котором реализован бот. Не говоря уже об алгоритмах или интеграциях. Например, бот для обратной связи может бы интегрирован с каким-то таск трекером, или с CRM системой. Если этого не понятно в явном виде из интерфейса бота, то скорее всего вы никак это и не узнаете.
Более того, под капотом, например, бота для обратной связи, может создаваться не просто лид в CRM или тикет в какой-нибудь тикет системе, а обращение может дублироваться еще и в чат в Telegram, или может начинаться выбор первого свободного специалиста сапорта, или… еще сто таких же “может”.
Все ли так безнадежно на самом деле? Или все-таки что-то можно сделать?
Если вы хотите дать подрядчику задачу скопировать чужого бота, то вот на какие вопросы можно себе ответить для начала:
- Бот собран на конструкторе? Есть ли какие-то видимые отметки об этом? Некоторые конструкторы делают подпись “бот собран на…” .
- Вы знаете кто сделал этого бота? Спрашивали у него про функционал? Или задача втихую скопипастить функционал конкурента? А вы знаете как построена инфраструктура конкурента? Хотя-бы какую CRM систему он использует?
- Вы сами проходили этого бота целиком? Точно целиком? Вам точно нужен РОВНО такой функционал? Или все-таки вон та реплика под той кнопкой не нужна?
Эти вопросы нужны для того, чтобы исполнитель (фрилансер или агентство) мог прикинуть что там внутри бота может быть наворочено и попробовать посчитать вам какую-то подобную механику.
Но надо понимать, что, например, у нас в агентстве, идет доплата за время аналитика, который будет пытаться нарисовать майндмап с функционалом существующего бота и выписывать непонятные участки. Чтобы при коммуникации потом остановиться на какой то из гипотез на этом самом майндмапе.
Чаще всего мы сразу говорим, что из этой затеи ничего хорошего не выйдет. Потому что, как правило, этот запрос приходит от удивительных заказчиков, которые сочетают в себе целое комбо клише. Например криптоинвесторов, которые хотят трейдить ровно так-же, как трейдит другой криптоинвестор. (да простят меня криптоинвесторы).
Но смотреть чужих ботов надо
Как бы ни была трагична или печальна ситуация с копированием ботов — смотреть их все равно надо. Как минимум для прокачки той самой насмотренности.
В ТЗ для разработчика нормально писать фразу: “По аналогии с ботом N”. То есть когда заказчик уже набросал ТЗ в каком-то удобоваримом виде, дополнить этот документ референсами ботов это наоборот хорошо. Такие фразы помогают лучше понять общее настроение заказчика на внешний вид будущего продукта.
Но как бы ни был велик соблазн отдать целиком какой-то раздел на откуп исполнителю, лучше прописать все детали подробно. Иначе все скатится к фразе “Без ТЗ — результат ХЗ”.
Часто мы сами предлагаем посмотреть какого-то бота и взять из него какую-то фичу. Просто потому, что заказчик далеко не всегда лучше нас знает как будет ему лучше.
Да, в конце статьи есть ссылка на наш Telegram канал про чат-ботов. Куда же без нее в 2022 на vc.
Discord бот на Python
В данной статье мы создадим Discord бот, используя при этом только Python.
Краткая информация о Discord для тех, кто еще о нем не знает
Discord — это, фактически, универсальная платформа голосового и текстового общения для геймеров.
Игроки, стримеры, студенты и разработчики используют Discord, чтобы обсуждать игры, отвечать на вопросы, общаться в чате во время игры в хорошем качестве, в том числе с членами своей команды. В нем даже есть игровой магазин с критическими отзывами и возможностью подписки. По сути, это центр игровых сообществ.
Хотя есть много вещей, которые вы можете создать с помощью API Discord, в этом руководстве мы остановимся на создании бота на Python.
Необходимые приготовления
Чтобы создать Discord бот, вам понадобится:
- Аккаунт в Discord и собственный сервер
- Python
- Устойчивое интернет-соединение во время всего процесса.
Что такое боты?
Бот (сокращение от «робот») — это программа, которая выполняет автоматические, повторяющиеся и заранее определенные задачи. Боты обычно имитируют человеческое поведение или подменяют его. Поскольку все их действия автоматизированы, они работают намного быстрее, чем обычные пользователи.
Боты очень часто используются для ответов на типовые вопросы, возникающие в различных сообществах. Они действуют как своего рода представители человека для выполнения различных функций. Основной особенностью такого бота является то, что он устраняет необходимость вручную отвечать каждому участнику и полностью автоматизирует данный процесс.
Для чего нужны чат-боты
Автоматизация ответов на основные вопросы
В любой области деятельности всегда есть вопросы, которые пользователи задают чаще всего. И на эти вопросы каждый раз надо давать одни и те же ответы. Лучшее решение в таком случае — чат-бот.
Ускорение рабочих процессов
Чат-боты, в отличии от людей, никогда не устают. Все люди могут работать только ограниченный период времени, в то время как у ботов таких ограничений нет. Использование чат-ботов в бизнесе хорошо дополняет работу людей, повышает производительность труда и сокращает человеческий труд.
Экономия денег и времени
При правильном использовании дружелюбного чат-бота привлечение клиентов происходит с минимальными затратами и максимальной эффективностью.
Пишем код для чат-бота
Сперва убедитесь, что на вашем компьютере установлен Python. Если его еще нет, то загрузите его с официального сайта.
Среду программирования можно использовать любую, какая вам больше нравится. Например, PyCharm, VS Code или Sublime.
Теперь выберите опцию New application (новое приложение) в правом верхнем углу страницы и дайте вашему новому приложению имя. Как видите, можно даже добавить изображение к аватару вашего бота. Мы можем сделать это позже. Сейчас пойдем в раздел Bot (на странице слева) и выберем опцию Add bot (добавить бота).
Сделав это, перейдите в категорию OAuth2 и в секции scope выберите опцию bot . Далее идите в секцию Permissions и настройте разрешения по вашему выбору.
Затем откройте ссылку под секцией scope в новом окне и выберите сервер, на котором вы желаете видеть ваш бот.
После этого установим библиотеку discord .
Для этого введем следующую команду:
pip install discord
Вот официальный сайт, где есть вся необходимая информация по данной библиотеке. Здесь же мы только заметим, что эта библиотека поддерживает API acync/await .
После установки этой библиотеки откройте ваш редактор кода и создайте файл bot.py .
Основная задача нашего тестового бота будет состоять в том, чтобы давать ответ всем пользователям на их сообщение «Hello». Но вы, конечно, можете его настроить в соответствии с вашими потребностями.
Для начала импортируем необходимые библиотеки:
import discord from discord.ext import commands
Создадим переменную Client :
client = commands.Bot( command_prefix=" / " )
Обратите внимание, что вы можете выбрать любой префикс (например « > «, « . » и тому подобное).
Также имейте ввиду, что если вы хотите вызывать своего бота, ваша вызывающая команда должна иметь префикс, сохраненный в атрибуте command_prefix .
Например, в нашем случае, чтобы вызвать бота, нужно написать /hello , а не просто hello .
Напишем следующий код для определения статуса бота:
@client.event async def on_ready( ): print("Bot is ready")
Это сообщение будет отображаться всякий раз, когда вы размещаете своего бота в сети. Вы также можете проверить статус бота из самого Discord.
Это сообщение подтверждает, что наш бот готов к использованию на сервере.
Теперь, когда бот готов к работе, мы можем ответить пользователям на их приветствие hello :
@client.event async def hello( ): await ctx.send("Hi")
Эта функция задает условие, при котором, когда пользователь набирает /hello , бот отвечает hi .
Для запуска бота нам понадобится токен. Он находится в разделе Bot на сайте Discord. Мы заходили туда при создании бота.
client.run(" Token ")
Замените слово Token на ваш код. Сам токен находится рядом с аватором бота. Если вдруг его там нет, нажмите на надпись Click to Reveal Token . Это должно сработать.
Теперь настало время запустить нашего бота!
Откройте CMD и наберите следующую команду:
bot.py
Если так не выходит, то наберите вот это:
python bot.py
Если вы правильно выполнили все предыдущие шаги, то должны увидеть сообщение Bot is ready .
Теперь перейдем на наш сервер и введем тестовый запрос, который в нашем случае был /hello . Мы увидим, что наш бот отвечает нам Hi .
Точно таким же образом пишем бот для приветствия новых участников:
import os import discord from dotenv import load_dotenv load_dotenv() TOKEN = os.getenv('DISCORD_TOKEN') client = discord.Client() @client.event async def on_ready(): print(f' has joined Discord!') @client.event async def on_member_join(member): await member.create_dm() await member.dm_channel.send( f'Hello !! Welcome to Our Discord Server!' ) client.run(TOKEN)
Возможные проблемы при создании бота
Все может быть не так просто, как это кажется на первый взгляд. Вы обязательно должны помнить о проблемах, с которыми можете столкнуться при создании бота. Некоторые из них мы перечислили ниже:
- Различные способы отправки текстовых сообщений. У всех людей есть свой стиль написания текстовых сообщений (короткие предложения, длинные предложения, несколько коротких предложений в разных сообщениях и так далее). Так что понять пользователя может быть непростой задачей.
- Пользовательские эмоции. Все мы люди, и всем нам свойственны эмоции. Наше поведение контролируется эмоциями. Мы чувствуем себя по-разному в разные моменты времени. И, кроме того, настроение постоянно меняется, и это отражается на сообщениях.
- Создание креативного и интерактивного пользовательского интерфейса (UI): Промежуток времени, за который можно привлечь внимание пользователя, очень невелик. Здесь в игру вступает диалоговый интерфейс. Его задача состоит в привлечении пользователей. То, как бот реагирует на сообщение пользователя, должно привлекать его внимание. Чем эффективнее мы это делаем, тем больше шансов, что бот снова будет востребован. Поэтому следует уделять особое внимание написанию ответов на запросы пользователей.
Заключение
Мы рассмотрели, как создать Discord бот на Python. Разумеется, это был простейший бот. Но вы, конечно же, можете написать свой собственный код и добавить множество различных функций, например OCR.
Спасибо за внимание и хорошего дня!
Как узнать на какие сервера бот discord включен( python )
Всем привет! У меня такая проблема. Я хочу сделать разумного бота который с нуля будет редактировать и переделать сервер на более красивую. Но для этого пришла самая первая проблема — на какие сервера он подключен. Если его подключили то он должен знать какое имя сервера чтобы именно туда добавить каналы. Основый код слишком маленький так как я недавно только добавил.
import discord as ds @bot.event async def on_message(): pass # сюда
Я не знаю команду(я поискал в документе дискода) и поэтому решил спросить у вас.
Отслеживать
Master’s Time
задан 24 дек 2021 в 16:43
Master’s Time Master’s Time
357 1 1 серебряный знак 17 17 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Это есть в документаци
bot.guilds
Отслеживать
ответ дан 24 дек 2021 в 20:49
2,302 1 1 золотой знак 4 4 серебряных знака 11 11 бронзовых знаков
Я только что посмотрел и оказывается это ответ на вопрос
25 дек 2021 в 7:06
- python
- discord.py
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.