Бот для дискорда на python


Discord-бот на Python

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

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

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

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

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

pip3 install discord.py

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

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

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

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

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

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

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

Перейдите в OAuth3 >> 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 = {
 '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'])

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

Разбор:

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

Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.

Подробнее

Реклама на tproger.ru

Загрузка

Создание 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/oauth3/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 часть.

Быстрый старт

меню настройки

На этой странице дается краткое введение в библиотеку. Предполагается, что у вас установлена ​​библиотека, если вы не отметите раздел «Установка».

Давайте создадим бота, который отвечает на конкретное сообщение и проведет вас через него.

Выглядит примерно так:

 # В этом примере требуется интент 'message_content'. импортировать разногласия намерения = разногласия.Намерения.по умолчанию() намерения.message_content = Истина клиент = discord.Client (намерения = намерения) @client.event асинхронная защита on_ready(): print(f'Мы вошли как {client.user}') @client.event асинхронное определение on_message (сообщение): если сообщение.автор == клиент.пользователь: возвращаться если message.content.startswith('$hello'): ожидание message.channel.send('Привет!') client.run('ваш токен здесь') 

Назовем этот файл example_bot.py . Не называйте его discord.py , так как это будет конфликтовать. с библиотекой.

Здесь много чего происходит, так что давайте проведем вас шаг за шагом.

  1. Первая строка просто импортирует библиотеку, если это вызывает ModuleNotFoundError или ImportError затем перейдите к разделу «Установка» для правильной установки.

  2. Далее мы создаем экземпляр Клиент . Этот клиент — наша связь с Discord.

  3. Затем мы используем декоратор Client.event() для регистрации события. В этой библиотеке много событий. Поскольку эта библиотека асинхронная, мы делаем что-то в стиле «обратного вызова».

    Обратный вызов — это, по сути, функция, которая вызывается, когда что-то происходит. В нашем случае событие on_ready() вызывается, когда бот завершил вход в систему и настройку вещей вверх и on_message() 9Событие 0012 вызывается, когда бот получил сообщение.

  4. Поскольку событие on_message() срабатывает для при каждом полученном сообщении , мы должны сделать уверены, что мы игнорируем сообщения от самих себя. Мы делаем это, проверяя, является ли Message.author совпадает с Client.user .

  5. После этого мы проверяем, начинается ли Message.content с '$hello' . Если это так, затем мы отправляем сообщение в канал, в котором оно было использовано с 'Привет!' . Это основной способ обработка команд, которые впоследствии могут быть автоматизированы с помощью discord.ext.commands — инфраструктуры бот-команд.

  6. Наконец, мы запускаем бота с нашим токеном для входа. Если вам нужна помощь в получении токена или создании бота, посмотрите в разделе Создание учетной записи бота.

Теперь, когда мы создали бота, нам нужно запустить бота. К счастью, это просто, так как это всего лишь Скрипт Python, мы можем запустить его напрямую.

В Windows:

 $py -3 example_bot.py 

В других системах:

 $ python3 example_bot.py 

Теперь вы можете попробовать поиграть со своим базовым ботом.

© Copyright 2015-настоящее время, Rapptz. Создано с использованием Sphinx 4.4.0.

Создание учетной записи бота

меню настройки

Чтобы работать с библиотекой и Discord API в целом, мы должны сначала создать учетную запись Discord Bot.

Создание учетной записи бота — довольно простой процесс.

  1. Убедитесь, что вы вошли на сайт Discord.

  2. Перейти на страницу приложения

  3. Нажмите кнопку «Новое приложение».

  4. Дайте приложению имя и нажмите «Создать».

  5. Создайте пользователя-бота, перейдя на вкладку «Бот» и нажав «Добавить бота».

  6. Убедитесь, что установлен флажок Public Bot , если вы хотите, чтобы другие приглашали вашего бота.

  7. Скопируйте токен с помощью кнопки «Копировать».

    Предупреждение

    Следует отметить, что этот токен по сути является вашим ботом пароль. Вы не должны никогда не делиться этим с кем-то еще. При этом кто-то может войти в ваш бот и совершать злонамеренные действия, например серверов, заблокировать всех участников внутри сервера или злонамеренно пинговать всех.

    Возможности безграничны, поэтому не делитесь этим токеном.

    Если вы случайно слили свой токен, нажмите кнопку «Регенерировать», как только насколько это возможно. Это аннулирует ваш старый токен и создаст новый. Теперь вам нужно использовать новый токен для входа.

Вот и все. Теперь у вас есть учетная запись бота, и вы можете войти с этим токеном.

Итак, вы создали пользователя-бота, но на самом деле его нет ни на одном сервере.

Если вы хотите пригласить своего бота, вы должны создать для него URL-адрес приглашения.

  1. Убедитесь, что вы вошли на сайт Discord.

  2. Перейти на страницу приложения

  3. Нажмите на страницу своего бота.

  4. Перейдите на вкладку «OAuth3».

  5. Установите флажок «бот» в разделе «Области действия».

  6. Отметьте разрешения, необходимые для работы вашего бота, в разделе «Разрешения для бота».

    • Помните о последствиях требования, чтобы ваш бот имел разрешение «Администратор».

    • У владельцев ботов должна быть включена двухфакторная аутентификация для определенных действий и разрешений при добавлении на серверы с включенной двухфакторной аутентификацией на уровне сервера. Посетите страницу поддержки 2FA для получения дополнительной информации.

  7. Теперь полученный URL-адрес можно использовать для добавления вашего бота на сервер. Скопируйте и вставьте URL-адрес в браузер, выберите сервер, на который нужно пригласить бота, и нажмите «Авторизовать».


    Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: