Создание Discord-бота на Python. Часть 1

Версии, которые стоят у автора

Версия Python: 3.8.2
Версия discord.py: 1.3.3


Приветствую, хабровчане и другие пользователи интернета. Сегодня я начну цикл статей, посвящённых созданию Discord-бота с помощью библиотеки discord.py. Мы рассмотрим создание как и примитивного бота, как и "продвинутого" бота с модулями. В этой статье мы сделаем стандартную команду и ещё одну небольшую команду. Начнём!


Создание бота и получение токена


Для того, чтобы добавить бота на сервер нужно создать свое приложение и во вкладке General Information скопировать Client ID.



Здесь заменяем CLID на ранее скопированный Client ID.


https://discordapp.com/oauth2/authorize?&client_id=CLID&scope=bot&permissions=8

Во вкладке Bot создаём бота и копируем токен.



Написание кода


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


pip install discord

Создаём файл config.py (так удобнее), и создаём там словарь.


settings = {
    'token': 'Ваш токен',
    'bot': 'Имя бота',
    'id': Client ID бота, без кавычек,
    'prefix': 'Префикс бота'
}

Создаём main-файл, название может быть любое.
Импортируем библиотеки и наш файл конфига:


import discord
from discord.ext import commands
from config import settings

Создаём "тело" бота, название может быть любое:


bot = commands.Bot(command_prefix = settings['prefix']) # Так как мы указали префикс в settings, обращаемся к словарю с ключом prefix.

Начинаем писать основной код.


@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
    author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.

    await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.

В конце запускаем бота с помощью:


bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена

Полный код
import discord
from discord.ext import commands
from config import settings

bot = commands.Bot(command_prefix = settings['prefix'])

@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
    author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.
    await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.

bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена

Должно получится так:



Бонусный туториал!


Сделаем вывод случайных картинок с лисами
Для этого импортируем еще пару библиотек:


import json
import requests

Приступим к написанию команды.


@bot.command()
async def fox(ctx):
    response = requests.get('https://some-random-api.ml/img/fox') # Get-запрос
    json_data = json.loads(response.text) # Извлекаем JSON

    embed = discord.Embed(color = 0xff9900, title = 'Random Fox') # Создание Embed'a
    embed.set_image(url = json_data['link']) # Устанавливаем картинку Embed'a
    await ctx.send(embed = embed) # Отправляем Embed

Должно получится так:



Конец


На этом 1 часть закончена. Скоро будет опубликована 2 часть.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 2

    0
    Простите, но можно что-то более развернутое и сложное? У нас этих гайдов уже несколько.
    habr.com/en/post/494600
      0

      json_data = json.loads(response.text) # Извлекаем JSON
      но можно же так:
      json_data = response.json() # Извлекаем JSON

      Only users with full accounts can post comments. Log in, please.