Подача гифок с помощью Discord Bot — время чтения: 12 минут
В этой статье мы ориентируемся на разработчиков Python, которые заинтересованы в создании собственных чат-ботов в Discord.
Читатель должен иметь некоторое представление о Python. Для установки библиотек и создания функций в Python.
Это сделано для того, чтобы читатель мог воспользоваться существующими инструментами чат-бота для создания своего собственного бота.
Вы когда-нибудь задумывались, у вас может быть свой собственный личный помощник? Чтобы помочь вам сделать ваши домашние дела или задачи для вас?
Когда Apple впервые анонсировала своего ИИ-помощника под названием Сири. Миру во время их одного из выпусков Apple iPhone.
Siri покорила мир, было множество статей или видео на забавные вопросы. Люди спрашивали Сири, как если бы Сири была реальным человеком.
Сегодня мы научимся создавать своего личного помощника, который будет отвечать вам гифками, а не просто словами в Discord, используя наш любимый Python!!!
Что такое раздор?
Discord — это приложение для передачи голоса по IP (VoIP), которое обеспечивает как текстовую, так и голосовую связь.
Это популярно среди геймеров или других сообществ, которые хотели бы использовать серверы для организации мероприятий.
Сервис похож на Telegram или Whatsapp, который обеспечивает интеграцию для голосовых вызовов в чате и внутриигровых функций.
Восстание чат-ботов
Поскольку все больше людей начали использовать клиенты для обмена сообщениями, такие как WhatsApp, Telegram, Facebook Messenger и Slack.
Это породило тенденцию к созданию чат-ботов для различных целей, таких как повышение удовлетворенности клиентов и автоматизация процессов.
Распространенное использование чат-ботов
Прошли те времена, когда для поиска решений приходилось переходить на страницу часто задаваемых вопросов или звонить в центр поддержки клиентов.
Вместо этого они заменены новым блестящим ботом.
Кто расскажет вам анекдоты, предложит решения или порекомендует продукты или услуги, соответствующие вашим потребностям.
Настраивать
Хорошо, давайте опустим руки и начнем с настройки нашего сервера.
мы должны зарегистрировать аккаунт на Раздор.
Настройка Discord-сервера
После создания учетной записи войдите в свою вновь созданную учетную запись. Вы будете на channels
страница.
Это позволяет добавить сервер → плюс значок, чтобы добавить новый сервер, как показано ниже.
После нажатия на плюс значок, вы попадаете на эту страницу с вариантами создания нового сервера или присоединения к существующему серверу.
Нажмите кнопку «Создать сервер», затем заполните информацию о своем собственном сервере и нажмите кнопку Создайте кнопка.
Поздравляю!!! Вы только что создали свой первый сервер. Этот сервер будет использоваться для оставшейся части этого руководства. А пока сделайте перерыв, прежде чем продолжить.
Создание приложения и бота
Хорошо, пойдем в Дискорд портал для разработчиков на и войдите в свою учетную запись.
Как только вы окажетесь на портале разработчика, он будет выглядеть примерно так.
Нажмите кнопку «Новое приложение», чтобы создать новое приложение. Так что ваш бот сможет использовать токен для взаимодействия с вашим сервером.
Далее, на оставил стороны боковой панели есть имя под названием bot
. Нажмите на bot → Add Bot
кнопка.
Появится запрос на подтверждение создания вашего бота. Игнорируйте его и продолжайте, нажав кнопку «Да, сделайте это».
Добавление бота на ваш сервер
Теперь мы приступим к добавлению вашего свежесозданного бота на сервер.
Сначала нажмите на вкладку General Information
в левой части созданного вами приложения.
Затем нажмите на копировать кнопку, которая находится под идентификатором клиента, чтобы скопировать идентификатор клиента.
Это позволяет вам сформировать URL-адрес с идентификатором клиента вашего приложения на портале разработчика, как показано ниже.
Теперь откройте новую вкладку в браузере и перейдите по только что сформированному URL-адресу.
Вы перенаправлены на веб-сайт, который позволяет вам одобрить связь вашего бота на сервер.
Поздравляю!!! Теперь вы завершили настраивать процесс вашего бота и сервера. Вернитесь к этому руководству снова, когда будете готовы начать кодирование.
Привет мир на Discord сервере
С возвращением, давайте приступим к созданию бота. Создайте папку под названием discord
.
Затем создайте виртуальную среду с именем venv
в той же папке.
$ virtualenv --python=python3 venv
$ source venv/bin/activate
В виртуальной среде, которую вы создали, мы должны установить библиотеку, как показано ниже:
$ python3 -m pip install -U discord.py
Создайте файл с именем bot.py
с вашим токеном бота, созданным на портале разработчика на вкладке «Бот»:
import discord token = 'your_discord_bot_token'
Чтобы ваш бот работал, вам нужно создать класс Python с именем DiscordClient
.
Этот класс должен содержать минимум две функции, а именно on_ready()
& on_message()
как показано ниже:
class DiscordClient(discord.Client): async def on_ready(self): pass async def on_message(self, message): pass
on_ready()
Функция используется для установления соединения с вашим сервером с помощью токена вашего бота:
async def on_ready(): print("Login as") print(self.user) print("-------")
on_message()
ответ функции с Привет сообщение всякий раз, когда пользователь говорит «привет»:
async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hello') client = DiscordClient()
client.run(token)
После того, как вы включили код для обоих on_ready()
& on_message()
функции. bot.py
должна выглядеть так для вашей первой программы бота:
bot.py
import discord token = 'your_discord_bot_token' class DiscordClient(discord.Client): async def on_ready(self): print("Login as") print(self.user) print("-------") async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hello') client = DiscordClient()
client.run(token)
Теперь давайте запустим программу и перейдем к вашему серверу, чтобы набрать «привет» в общий канал :
Потрясающий!!!! Теперь, когда вы заставили своего бота сказать «Привет». Давайте перейдем к командам и поиграем с ними.
Дискорд-команды
Есть куча полезных команд, связанных с пользователями. Я расскажу только основы.
Для получения дополнительной информации о командах вы можете перейти к Справочное руководство по API чтобы проверить это.
Волшебный шар 8
Команды следует вызывать из bot2.py
с ? префикс.
С помощью команды под названием 8ball
. Который ответил прогнозом всякий раз, когда вы инициируете команду:
bot2.py
from discord.ext.commands import Bot
import random token = 'your_bot_token'
bot = Bot(command_prefix='?') @bot.event
async def on_ready(): print("Login as") print(bot.user.name) print("-------") @bot.command(name="8ball")
async def magic_eight_ball(ctx): response =['Without a doubt.', 'Outlook good.', 'Better not tell you now.', 'Cannot predict now.', 'My reply is no.', 'Outlook not so good.',] await ctx.send(random.choice(response)) bot.run(token)
Давайте запустим программу Python, чтобы протестировать только что созданную команду, введя «? 8ball».
Что такое контекст?
Обратите внимание, что для каждой команды бота требуется параметр ctx
быть вызванным.
Который называется Контекст для запуска различных команд, связанных с ботом.
Использование клиента GIPHY Python
Теперь мы интегрируем клиент Giphy Python, как показано ниже:
$ pip install giphy_client
После того, как вы завершили установку клиента giphy, давайте перейдем к Портал разработчиков Giphy зарегистрироваться и создать новое приложение. Чтобы вы могли получить Ключ API Гифи.
Получить Топ 5 Популярных GIF
За giphy.py
, импортируйте следующее. Какой giphy_client
который помогает инициировать DefaultApi
а также ApiException
который занимается различными исключениями, связанными с Гифи API.
pprints()
используется для отображения ответа в удобном для чтения формате:
import giphy_client
from giphy_client.rest import ApiException
from pprint import pprint
Словарь конфигурации использует 3 ключа, а именно api_key
который является ключом API Giphy.
query
который является поисковым запросом, который вы ищете Гифи И наконец limit
это количество картинок, которые возвращаются из результатов поиска:
api_instance = giphy_client.DefaultApi()
config = { 'api_key': 'your_api_key', 'limit': 1, 'rating': 'g'
} try: api_response = api_instance.gifs_trending_get( config['token'], limit=config['limit'], rating=config['rating']) pprint(api_response) except ApiException as e: print("Exception when calling DefaultApi->gifs_trending_get: %s\n" % e)
Поиск GIF по словам или фразе
Для поиска ваших GIF-файлов по словам вам необходимо внести следующие изменения.
Из .gifs_search_get()
и добавьте дополнительное поле под названием query
в обоих config
переменная и api_response
как показано ниже:
config = {'api_key': 'your_api_key', 'q': 'cheese', 'limit': 1, 'rating': 'g'} try: api_response = api_instance.gifs_search_get(config['api_key'], limit=config['limit'], rating=config['rating'],q=config['q']) except ApiException as e: print("Exception when calling DefaultApi->gifs_search_get: %s\n" % e)
Случайный GIF
Чтобы получить случайный gif, вам нужно удалить оба query
& limit
поле из config
переменная.
Кроме того, необходимо заменить .gifs_search_get()
использовать .gifs_random_get()
как показано ниже.
config = { 'token': 'your_giphy_token', } try: api_response = api_instance.gifs_random_get(config['api_key'])
Давайте сделаем перерыв и начнем применять то, чему мы научились с нашим ботом, для подачи гифок.
Бот, обслуживающий GIF-файлы в Python
Добро пожаловать обратно мы начнем с использования библиотеки Giphy для поиска GIF и загрузки его на ваш сервер в качестве ответа для вашего бота в программе Python под названием «bot2.py».
Отображение GIF на сервере
Импортируйте следующие библиотеки:
import random
import giphy_client
from discord.ext.commands import Bot
from giphy_client.rest import ApiException
После добавления клиента giphy и ApiException
. Давайте реорганизуем наш исходный код, чтобы включить токен giphy:
discord_token = 'your_discord_token'
giphy_token = 'giphy_api_key' bot = Bot(command_prefix='?')
api_instance = giphy_client.DefaultApi()
Поиск гифок
Давайте теперь создадим функцию с именем search_gifs()
где giphy API будет искать гифки.
После того, как мы нашли 3 гифки, он случайным образом выберет гифку и отобразит URL-адрес всякий раз, когда 8ball
команда называется:
async def search_gifs(query): try: response = api_instance.gifs_search_get(giphy_token, query, limit=3, rating='g') lst = list(response.data) gif = random.choices(lst) return gif[0].url except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e
Улучшение команды Discord
Теперь мы добавим search_gifs()
функции в magic_eight_ball()
функция:
@bot.command(name="8ball")
async def magic_eight_ball(ctx): response = ['Without a doubt.', 'Outlook good.', 'Better not tell you now.', 'Cannot predict now.', 'My reply is no.', 'Outlook not so good.',] gif = await search_gifs('cheese') await ctx.send(random.choice(response)) await ctx.send('Gif URL : ' + gif)
После того, как вы провели рефакторинг вашего bot2.py
с библиотекой поиска gif. Это должно выглядеть следующим образом:
bot2.py
import random
import giphy_client
from discord.ext.commands import Bot
from giphy_client.rest import ApiException discord_token = 'your_discord_token'
giphy_token = 'giphy_api_key' bot = Bot(command_prefix='?')
api_instance = giphy_client.DefaultApi() @bot.event
async def on_ready(): print("Login as") print(bot.user.name) print("-------") async def search_gifs(query): try: response = api_instance.gifs_search_get(giphy_token, query, limit=3, rating='g') lst = list(response.data) gif = random.choices(lst) return gif[0].url except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e @bot.command(name="8ball")
async def magic_eight_ball(ctx): response = ['Without a doubt.', 'Outlook good.', 'Better not tell you now.', 'Cannot predict now.', 'My reply is no.', 'Outlook not so good.',] gif = await search_gifs('cheese') await ctx.send(random.choice(response)) await ctx.send('Gif URL : ' + gif) bot.run(discord_token)
Показать GIF
Давайте выполним bot2.py
проверить 8ball
введите следующую команду для выполнения вашего bot2.py:
Потрясающий!!! Это действительно работает хорошо. Давайте сделаем перерыв и возьмем KitKat, пока мы начнем создавать команды реакции GIF.
Отображение реакций бота
До сих пор мы научились искать гифки и отображать наши гифки всякий раз, когда кто-то вызывает команду.
Давайте создадим бота, который подает нам гифки на основе следующих слов: «Привет», «Добро пожаловать», «Пока» и «До свидания», который называется bot3.py
:
import random
import discord
import giphy_client
from giphy_client.rest import ApiException discord_token = 'your_discord_token'
giphy_token = 'your_giphy_api_key' api_instance = giphy_client.DefaultApi()
Давайте добавим search_gifs()
функция, которую мы ранее создали.
Мы увеличиваем количество искомых гифок до 5 вместо 3. Это будет служить для создания более случайного ответа gif:
def search_gifs(query): try: return api_instance.gifs_search_get(giphy_token, query, limit=5, rating = 'g') except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e
Кроме search_gifs()
функцию, мы должны добавить в gif_response()
часть кода разбита на search_gifs()
чтобы быть чище и проще для понимания:
def gif_response(emotion): gifs = search_gifs(emotion) lst = list(gifs.data) gif = random.choices(lst) return gif[0].url
Привет
Теперь, когда мы добавили search_gifs()
& gif_response()
функции.
Мы должны включить DiscordClient
Класс Python, как показано ниже, с on_ready()
для базовой настройки вашего бота.
class DiscordClient(discord.Client): async def on_ready(self): print("Login as") print(self.user) print("-------")
Теперь давайте сосредоточимся на создании логики для ответа бота всякий раз, когда пользователь говорит боту «привет» или «привет»:
async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hi there!!! ' + message.author.mention) await message.channel.send(gif_response('hi')) elif message.content == 'hello': await message.channel.send('Hello :) ' + message.author.mention) await message.channel.send(gif_response('hello'))
bot3.py
import random
import discord
import giphy_client
from giphy_client.rest import ApiException
discord_token = 'your_discord_token'
giphy_token = 'your_giphy_api_key'
api_instance = giphy_client.DefaultApi()
def search_gifs(query):
try:
return api_instance.gifs_search_get(giphy_token, query, limit=5, rating = 'g')
except ApiException as e:
return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e
def gif_response(emotion):
gifs = search_gifs(emotion)
lst = list(gifs.data)
gif = random.choices(lst)
return gif[0].url
class DiscordClient(discord.Client):
async def on_ready(self):
print("Login as")
print(self.user)
print("-------")
async def on_message(self, message):
# Whenever a user other than bot says "hi"
if message.author != self.user:
if message.content == 'hi':
await message.channel.send('Hi there!!! ' + message.author.mention)
await message.channel.send(gif_response('hi'))
elif message.content == 'hello':
await message.channel.send('Hello :) ' + message.author.mention)
await message.channel.send(gif_response('hello'))
client = DiscordClient()
client.run(discord_token)
Добро пожаловать
Путем повышения on_message()
функция для включения ответа «добро пожаловать» всякий раз, когда пользователь говорит «добро пожаловать»:
elif message.content == 'welcome': await message.channel.send(message.author.mention + ' Welcome to the discord channel :)') await message.channel.send(gif_response('welcome'))
С использованием message.author.mention
бот отвечает пользователю
Прощай
Это последний ответ, который мы добавим, чтобы бот говорил «до свидания» всякий раз, когда пользователь говорит «до свидания» или «до свидания»:
elif message.content == 'bye': await message.channel.send(message.author.mention + ' May the force be with you') await message.channel.send(gif_response('star wars bye')) elif message.content == "good bye": await message.channel.send(message.author.mention + ' Live long and prosper') await message.channel.send(gif_response('salute'))
Теперь, если вы заблудились с несколькими ответами gif, не волнуйтесь, я включил блок кода для bot3.py
как показано ниже:
bot3.py
import random
import discord
import giphy_client
from giphy_client.rest import ApiException discord_token = 'your_discord_token'
giphy_token = 'your_giphy_api_key' api_instance = giphy_client.DefaultApi() def search_gifs(query): try: return api_instance.gifs_search_get(giphy_token, query, limit=5, rating = 'g') except ApiException as e: return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e def gif_response(emotion): gifs = search_gifs(emotion) lst = list(gifs.data) gif = random.choices(lst) return gif[0].url class DiscordClient(discord.Client): async def on_ready(self): print("Login as") print(self.user) print("-------") async def on_message(self, message): if message.author != self.user: if message.content == 'hi': await message.channel.send('Hi there!!! ' + message.author.mention) await message.channel.send(gif_response('hi')) elif message.content == 'hello': await message.channel.send('Hello :) ' + message.author.mention) await message.channel.send(gif_response('hello')) elif message.content == 'welcome': await message.channel.send(message.author.mention + ' Welcome to the discord channel :)') await message.channel.send(gif_response('welcome')) elif message.content == 'bye': await message.channel.send(message.author.mention + ' May the force be with you') await message.channel.send(gif_response('star wars bye')) elif message.content == "good bye": await message.channel.send(message.author.mention + ' Live long and prosper') await message.channel.send(gif_response('salute')) client = DiscordClient()
client.run(discord_token)
Вывод
Вау, теперь, когда вы познакомились с созданием бота и использованием библиотеки Giphy, это было довольно увлекательно.
Давайте обобщим то, что вы узнали в этом уроке.
Теперь вы знаете больше о следующем:
- Что такое Дискорд?
- Восстание чат-ботов
- Использование клиента Giphy Python
- Бот, обслуживающий GIF-файлы
- Отображение реакций бота
Создав работающего бота, который раздает гифки любому пользователю. Вы можете похвастаться этим перед друзьями. Не волнуйся, я не буду судить
Ваша домашняя работа — подумать о способах его дальнейшего улучшения. Используя другие RESTful API и даже создавая с ними игры.
Я бы порекомендовал вам взглянуть на различные чат-боты, чтобы получить вдохновение чтобы помочь вам создавать интуитивно понятных и забавных ботов. Я с нетерпением жду возможности увидеть ваши творения ботов в будущем.
Если вам понравилась моя статья, пожалуйста зарегистрироваться для Макса Информационный бюллетень авантюриста за удивительный контент, который я натыкаюсь еженедельно в питон, Запускать а также Веб-разработка.
Вы также можете следить мне, чтобы получить последний обновление моей статьи о CodeMentor
Этот пост изначально был размещен в блоге Макса по адресу Подача гифок с помощью Discord Bot — время чтения: 12 минут а также Фото Энди Келли на Unsplash
Дальнейшее чтение
Вот несколько статей и руководств, которые могут помочь вам в улучшении вашего бота.
Чтобы быть интерактивным и интуитивно понятным для ваших пользователей, пока я исследовал, как создать это руководство.