Перейти к содержимому

Как сделать кнопки discord py

  • автор:

как сделать кнопку в discordpy

Вы использовали устаревшие примеры. Лично я использую вот так:

class Button(discord.ui.Button): def __init__(*, callback=None, **kwargs): super().__init__(**kwargs) if callback: self.callback = callback view = discord.ui.View() view.add_item( Button( # Параметры кнопки ) ) await ctx.send('Сообщение с кнопкой', view=view) 

Класс который я написал в начале призван ИСКЛЮЧИТЕЛЬНО упросить запись callback -функции (на вход передаётся корунтинная функция с аргументом Interaction )

Вы можете обойтись без него:

view = discord.ui.View() btn = discord.ui.Button( # Параметры кнопки ) btn.callback = корунтинная функция # Можно не писать, если вам не нужно view.add_item(btn) await ctx.send('Сообщение с кнопкой', view=view) 

Создание discord-ботов на Python

В этой статье мы создаем своего дискорд-бота на боксе с нуля.

Подготовка

Предварительные действия на боксе такие же, как и в нашей статье про Telegram:

  • выбираем бокс
  • создаем пользователя
  • настраиваем окружение

Регистрация бота

Создание бота происходит в два этапа на сайте мессенджера. Сначала создаем приложение: «Разработчикам»(в футере) → «Applications», нажимаем кнопку «New Application» в правой верхней части страницы:

Выбираем имя приложения (выбирайте мудро, хоть его и можно изменить позже):

Готово. Здесь можно переименовать приложение, дать описание, загрузить аватарку:

Теперь добавим к нему бота. В меню слева вкладка «Bot» → «Add Bot» → «Yes, do it!».

Токен бота можно получить по кнопке Copy:

Если вдруг токен попал не только в ваши руки, его всегда можно заменить кнопкой Regenerate.

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

Переходим на вкладку «OAuth2» и создаем для него свой URL для приглашения:

Чуть ниже выбираем права для бота. Если это бот для администрирования сервера, то можно, конечно, выбрать «Administrator», но нужно быть осторожными с этим.

Выдаем права, действительно нужные боту для администрирования сервера:

Теперь бота можно добавить на сервер. Копируем ссылку и открываем её в браузере. В диалоговом окне выбираем сервер:

Проверяем его привилегии:

Всё, бот на сервере:

Код бота

Активируем виртуальное окружение и ставим нужную библиотеку:

bot@box-48639:~$ source python/bin/activate (python) bot@box-48639:~$ pip install discord

Добавляем директорию для бота, не выходя виртуального окружения:

(python) bot@box-48639:~$ mkdir discobot

Создаем конфиг бота:

(python) bot@box-48639:~$ vim discobot/config.py

Наполняем его содержимым

settings =

  • token — токен бота
  • bot — имя бота
  • id — application ID: он находится под описанием приложения, в разделе «General Information»
  • prefix — если сообщение на сервере начинается с этого символа, бот воспримет его как свою команду.

Дальше код бота. Создаем bot.py и сразу редактируем его vim’ом:

(python) bot@box-48639:~$ vim discobot/bot.py

Первыми строками активируем виртуальное окружение и импортируем нужные модули:

import os, sys activate_this = '/home/bot/python/bin/activate_this.py' with open(activate_this) as f: exec(f.read(), ) import discord from discord.ext import commands from config import settings

Обозначаем боту, с какого символа начинаются его команды:

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

И создаем первую команду — бот будет отправлять реплай с текстом “I’M ALIVE!” на сообщение “!status”:

@bot.command() async def status(ctx): await ctx.reply('I\’M ALIVE!')

Добавляем в код функцию запуска:

bot.run(settings['token'])

Закрываем редактор и запускаем бота:

(python) bot@box-48639:~$ python discobot/bot.py

Отправим сообщение в Discord:

Код бота целиком:

import os, sys activate_this = '/home/bot/python/bin/activate_this.py' with open(activate_this) as f: exec(f.read(), ) import discord from discord.ext import commands from config import settings bot = commands.Bot(command_prefix = settings['prefix']) @bot.command() async def status(ctx): author = ctx.message.author await ctx.reply('I\'M ALIVE!') bot.run(settings['token'])

Запуск бота

Создаем Linux-демона — он будет следить, что бот работает. Открываем файл (mlg, если нужно, меняем на своё имя сервиса):

root@box-48639:~# vim /etc/systemd/system/mlg.service

Добавляем в него строки:

[Unit] Description=Noscope Bot After=syslog.target After=network.target [Service] Type=simple User=bot WorkingDirectory=/home/bot/discobot ExecStart=/usr/bin/python3 /home/bot/discobot/bot.py Restart=always [Install] WantedBy=multi-user.target

И запускаем демона:

root@box-48639:~# systemctl daemon-reload root@box-48639:~# systemctl enable mlg root@box-48639:~# systemctl start mlg

Проверить, что всё работает, можно так:

root@box-48639:~# systemctl status mlg
● mlg.service - Noscope Bot Loaded: loaded (/etc/systemd/system/mlg.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-05-05 16:34:46 MSK; 7s ago Main PID: 307021 (python3) Tasks: 3 (limit: 2344) Memory: 21.4M CGroup: /system.slice/mlg.service └─307021 /usr/bin/python3 /home/bot/discobot/bot.py

Дополнение кода бота

Бот улучшается в два этапа:

  • добавляем код в файл бота
  • перезапускаем бота

Для примера добавим в бота какое-нибудь рандомное API. Открываем файл бота:

bot@box-48639:~$ vim ~/discobot/bot.py

И добавляем в него пару библиотек и ещё одну функцию обработки команд:

import json import requests @bot.command() async def meme(ctx): response = requests.get('https://some-random-api.ml/meme') json_data = response.json() embed = discord.Embed(title = json_data['caption']) embed.set_image(url = json_data ['image']) await ctx.send(embed = embed)

Закрываем файл и перезапускаем демона, чтобы изменения вступили в силу:

root@box-48639:~# systemctl restart mlg

Результатом будет рандомный мем:

Готово! Боты в Discord умеют многое, и мы можем и дальше расширять его возможности, изучая документацию.

Полезные ссылки

  • Официальная документация Discord
  • Документация discord.py
  • GitHub разработчиков модуля

Гайд Как создавать Discord бота

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

riverya4life
Известный

Автор темы

Доброго времени форумчане БластХак!
Сегодня я расскажу и покажу, как создать своего первого бота в Discord!
Данный гайд посвящается всем, кто знает базу Python (кто не знает — иди учи питон)

Первый этап — Создание приложения.
Для начала вы должны создать приложение бота, для этого выполните все действия по порядку:

  1. Перейдите на страницу https://discord.com/developers/applications
  2. Нажмите на New Application. new aplication.png
  3. Введите название приложения, прочитайте Developer Terms of Service (https://discord.com/developers/docs/policies-and-agreements/developer-terms-of-service) и Developer Policy (https://discord.com/developers/docs/policies-and-agreements/developer-policy) и также, я советую вам ознакомиться с https://discord.com/tos, после всего этого нажмите на кнопку Create.
    create an application.png

Примечание: Вы можете изменить название приложения, описание, теги, также вы можете получить айди бота и его Public Key. Ниже вы можете увидеть ещё 4 галочки, но там вы и сами все поймете.

general informatio.png

  1. Перейдите во вкладку Bot.
    selected app.png
  2. Нажмите Add Bot и подтвердите это действие.
    add bot.png

! Если у вас включена двухфакторная аутентификация, вы должны ввести 6-значный код. Поздравляю! Ваше приложение создано абсолютно успешно.

bot token.png

Второй этап — Запуск нашего бота.
Для того чтобы получить токен бота, нажмите на кнопку View Token.

Далее, напишем первый код!

Для удобства буду использовать библиотеку disnake (discord.py fork), но перед написанием кода мы должны создать файл с расширением .py!
Если создали файл — поздравляю, можем приступать к написанию кода!

# Импорт библиотеки disnake. import disnake from disnake.ext import commands bot = commands.Bot(command_prefix="!") # Создание экземляра класса commands.Bot, в документации вы можете найти какие аргументы принимает этот класс. # С помощью command_prefix задаём префикс нашему боту, к примеру здесь будет префикс ! # Когда бот запущен, то будет вызван ивент. @bot.event async def on_ready(): print("Ваш бот готов!") # Запуск дискорд бота, как найти токен написано в гайде. bot.run("YOUR_DISCORD_BOT_TOKEN")

Дальше запускаем нашего бота. Можно запускать как через cmd, так и через созданный bat файл.
Готово!

Так-же приведу пример команды !ping, которая будет нам отвечать «Понг!»

Здесь мы используем уже декоратор @bot.command()
@bot.command()
принимает в себя аргументы, а именно — name (имя команды, можно сделать команду на русском языке), description (описание команды, больше подходит для команд косой черты) и usage (пример использования команды).

@bot.command(name = "ping", description = "Тест команда", usage = "ping") # в name задаём навзание команды async def ping(ctx): # передаём аргумент ctx (контекст) await ctx.reply("Понг!") # отвечаем пользователю вызвавшему команду.

Теперь по команде !ping бот будет отвечать вам Понг!

UPD 30.04. Сейчас покажу как создавать слеш команды (команды косой черты)!
Для этого нам нужно использовать декоратор @bot.slash_command()
Он принимает все те же аргументы, что и текстовые команды.
Пример команды !ping, но уже на слешах:

@bot.slash_command(name = "ping", description = "Тест команда", usage = "ping") async def ping(inter): # теперь мы передаём в аргументе не ctx, а inter | interaction (интеракция) await inter.response.send_message("Понг!") # отправляем сообщение

Небольшое пояснение про Interaction (кратко inter)
Что вообще такое ваш Interaction и с чем его едят?

Interaction в переводе с английского означает взаимодействие.
Это, по сути, вебхуки под капотом (и для ответа на взаимодействие не требуется токен бота). Таким образом, у вас может быть приложение, предназначенное только для взаимодействия, к которому могут получить доступ пользователи, не имея пользователя-бота в гильдии.
Бот должен быть добавлен с разрешением applications.commands, чтобы создавать слэш команды на сервере. Это рекомендуется к добавлению этого разрешение к приглашениям вашего бота.

Итоговый код нашего бота:

# Импорт библиотеки disnake. import disnake from disnake.ext import commands bot = commands.Bot(command_prefix="!") # Создание экземляра класса commands.Bot, в документации вы можете найти какие аргументы принимает этот класс. # С помощью command_prefix задаём префикс нашему боту, к примеру здесь будет префикс ! # Когда бот запущен, то будет вызван ивент. @bot.event async def on_ready(): print("Ваш бот готов!") # Наша первая команда @bot.command(name = "ping", description = "Тест команда", usage = "ping") # в name задаём навзание команды async def ping(ctx): # передаём аргумент ctx (контекст) await ctx.reply("Понг!") # отвечаем пользователю вызвавшему команду. # Наша слеш команда @bot.slash_command(name = "ping", description = "Тест команда", usage = "ping") async def ping(inter): # теперь мы передаём в аргументе не ctx, а inter | interaction (интеракция) await inter.response.send_message("Понг!") # отправляем сообщение # Запуск дискорд бота, как найти токен написано в гайде. bot.run("YOUR_DISCORD_BOT_TOKEN")

Как сделать кнопки discord py

Фриланс маркетплейс

Пользователей онлайн: 2054

Последний заказ: 17 сек. назад

Логотип и брендинг

Презентации и инфографика

Арт и иллюстрации

Веб и мобильный дизайн

Маркетплейсы и соцсети

Интерьер и экстерьер

Обработка и редактирование

Полиграфия

Промышленный дизайн

Наружная реклама

Доработка и настройка сайта

Создание сайтов

Десктоп программирование

Скрипты и боты

Мобильные приложения

Сервера и хостинг

Юзабилити, тесты и помощь

Тексты и наполнение сайта

Набор текста

Продающие и бизнес тексты

Резюме и вакансии

Статистика и аналитика

Соцсети и SMM

Контекстная реклама

Базы данных и клиентов

E-mail рассылки

Маркетплейсы и доски объявлений

Реклама и PR

Аудиозапись и озвучка

Музыка и песни

Редактирование аудио

Интро и анимация логотипа

Видеоролики

Персональный помощник

Бухгалтерия и налоги

Обзвоны и продажи

Юридическая помощь

Продажа сайтов

Подбор персонала

Презентация

Обучение и консалтинг

Стройка и ремонт

Логотип и брендинг

Презентации и инфографика

Арт и иллюстрации

Веб и мобильный дизайн

Маркетплейсы и соцсети

Интерьер и экстерьер

Обработка и редактирование

Полиграфия

Промышленный дизайн

Наружная реклама

Доработка и настройка сайта

Создание сайтов

Десктоп программирование

Скрипты и боты

Мобильные приложения

Сервера и хостинг

Юзабилити, тесты и помощь

Тексты и наполнение сайта

Набор текста

Продающие и бизнес тексты

Резюме и вакансии

Статистика и аналитика

Соцсети и SMM

Контекстная реклама

Базы данных и клиентов

E-mail рассылки

Маркетплейсы и доски объявлений

Реклама и PR

Аудиозапись и озвучка

Музыка и песни

Редактирование аудио

Интро и анимация логотипа

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *