Создаём Discord-бота на Python

Сегодня мы напишем Discord-бота с помощью Python и discord.py. А также посмотрим на примеры ботов.

106К открытий119К показов

Всем привет, сегодня мы напишем Discord-бота на Python и discord.py + бонусом посмотрим на примеры ботов. Приступим ?

Перед работой

Перед тем, как начать, вам нужны:

  1. Python 3;
  2. discord.py;
  3. Discord-аккаунт и свой сервер.

Для установки discord.py воспользуйтесь пакетным менеджером:

			pip3 install discord.py
		

Создаём нашего бота

Перейдите на Developer Portal и нажмите на New application.

Создаём Discord-бота на Python 1

Вы создали своё приложение, на странице приложение перейдите в Bot >> Add Bot и создайте своего Discord-бота.

Сохраните токен бота! Дальше он нам понадобится!

Создаём Discord-бота на Python 2

Если всё прошло успешно, поздравляю, половина дела сделана ?

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

Теперь можно добавить бота на сервер.

Перейдите в OAuth2 >> URL Generator, в Scopes выбираем Bot и ниже — права бота, копируем сгенерированный URL. Вставляем в браузер, и добавляем на наш сервер.

Создаём Discord-бота на Python 3

Эхо-бот

Напишем традиционного эхо-бота, и разберём каждую строчку кода.

Код:

			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'])
		

Пример работы:

Создаём Discord-бота на Python 4

Разбор:

			import discord
from discord.ext import commands
		

Нужные нам импорты.

			config = {
    'token': 'your-token',
    'prefix': 'prefix',
}
		

Вспомогательный словарь 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'])
		

Результат работы:

Создаём Discord-бота на Python 5

Разбор:

			@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('Пользователь {user.name} был изгнан по причине "{reason}"')

bot.run(config['token'])
		
Следите за новыми постами
Следите за новыми постами по любимым темам
106К открытий119К показов