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

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

  • автор:

Как в discord.py сделать интерактивную кнопку со ссылкой?

Естественно, выдает ошибку. Не знаю, как это сделать..

Upd:
Попробовал такой вариант

button = Button(style=discord.ButtonStyle.url, label='Перейти', url=URL_IN_BUTTON) await interaction.response.send_message(content=text, ephemeral=True, view=button)

тоже не работает

  • Вопрос задан 22 нояб. 2023
  • 89 просмотров

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

Простой 1 комментарий

Создание 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.py

Discordpy

Для этого вам придётся зайти на сайт Discord’а по разработки приложений. Далее создаём приложение с помощью кнопки New Application.

Нужно дополнить этот отдел информацией и изображениями

Шаг 2 — Hello World! [ ]

Напишем сначала просто код для того чтобы бот запускался.

import discord client = discord.Client() client.run("Insert here token of bot") 

Кстати, токен бота обычно хранят в отдельном файле. Далее создаём событие через @client.event и пишем асинхронную функцию on_message.

@client.event async def on_message(message): if message.content.startswith(".hello"): await message.channel.send("Hello World!") 

Также в разработке Discord ботов пример Hello World заменяется «Ping Pong». Выглядит так: пишешь команду ping, получаешь ответ Pong! Теперь напишем событие во время запуска. Оно необязательно, но благодаря ему можно узнать когда можно использовать бота + некоторые команды (например client.change_presence()) лучше использовать именно в этом событии.

@client.event async def on_ready(): print("I'm ready!") 

Шаг 2.1 — Создание бота через commands.Bot() [ ]

Особо ничем не отличается т.к. является классом-наследником от Client, однако имеет возможности которые значительно облегчают разработку. Вот так выглядит обычный код с запуском бота и Ping Pong:

import discord from discord.ext import commands client = commands.Bot() @client.command() async def ping(ctx): await ctx.send("Pong!") client.run("Insert here token of bot") 

В командах необходимо писать ctx даже если он не используется!

Вопросы с меткой [discord.py]

Я тестирую бота в Discord и пытаюсь получить текущее время в часах у пользователя, в каком часовом поясе он находиться не известно. Естественно datetime.now() и datetime.now(pytz.timezone(‘Europe/.

задан 24 июл 2021 в 12:55
2k показов

Как использовать кнопки и подсказки при вводе команд, присутствующие в верифицированных ботах в библиотеке discord.py

При использовании бота Juniper Bot я заметил кнопки, которых нет у обычных ботов, но эту функцию мне хотелось бы использовать. Можете пожалуйста сказать, как использовать изображённые снизу функцию (.

задан 25 июн 2021 в 14:04
4k показов

Как установить ограничение в использовании команды по роли Discord.py

Я делаю бота для Discord на Python с помощью модуля Discord.py. И мне нужно сделать так, чтобы определенную команду могли использовать только участники имеющие определенные роли. Я Пробовал перед .

задан 21 янв 2021 в 5:35
3k показов

Как отключить бота discord от голосового канала?

Есть проблема при отключении бота от голосового чата: import discord import asyncio from discord.ext import commands from discord.ext.commands import Bot Bot = commands.Bot(command_prefix=’!’) @Bot.

задан 27 сен 2019 в 22:51

Редактирование embed по нажатию кнопки

Пытаюсь повторить функцию, в которой по нажатию кнопки «голос пользователя» добавляется в определённый столбец Embed. (См. скрины 1 и 2) @bot.slash_command(description=»Создание .

задан 28 дек 2021 в 18:56
1k показов

Прямой вывод звука из Ютуб в канал дискорда

Хочу сделать музыкального бота сам. Но проблема в выводе звука. Он берет аргументы, ищет в ютубе, берет href первого видео и выдает ссылку. Я это сделал с помощью bs4 и requests. Дальше я хотел .

задан 8 дек 2019 в 23:14
79 показов

Ошибка при объявлении двух глобальных переменных

if message.content.lower().startswith(‘!m_change’): global DIR global MODE if (DIR == ‘arts/normal’ and MODE == ‘Обычный.’): DIR = ‘arts/hentai’ MODE = ‘Хентай.’ .

задан 19 дек 2020 в 11:46

Как вывести ошибку Forbidden discord.py

Здраствуйте! Не знаю как вывести ошибку discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions. Различные методы пробовал, через cog_command_error() и isinstance(error, .

задан 23 июн 2021 в 13:35
4k показов

Discord.py | Слэш команды

Моя проблема заключается в том что когда я хочу использовать слэш команду то ответ на неё появляется не сразу. Только после 2-х, 3-х раз использовании данной команды. Сперва появляется ошибка, а .

задан 23 июл 2021 в 16:24
239 показов

Как забанить участников у которых нет определённой роли discord.py?

Мне нужно забанить всех участников у которых нет определённой роли, но я не понимаю, как это сделать.

задан 13 апр 2021 в 19:07
3k показов

Как считать время проведенное в голосовом канале? | discord.py

У меня есть код, который реагирует на вход в голосовой, и выход из него. При входе пишется «1», при выходе «0». Как мне его изменить, чтобы он еще и считал время проведенное в .

задан 21 дек 2020 в 11:50
433 показа

Не работает команда random у бота на discord.py. В консоли пусто

Бот просто не отвечает на команду. Если не ввести первое или второе число, то он об этом напишет, а если ввести всё правильно, то следом не последуют никакой реакции, но при этом работают абсолютно .

задан 12 дек 2020 в 10:08
2k показов

Как получить информацию о том, какую роль в дискорде занимает человек discord.py

Как в коде python с помощью библиотеки discord.py получить сведения о том, какую роль занимает человек?

задан 24 фев 2020 в 13:48
392 показа

Как узнать, что в голосовом канале, кроме бота, больше никого нет? [discord-py]

Использую библиотеку discord.py, событие на вход/выход пользователей определять умею, а вот как узнать, что в канале больше никого нет кроме бота? Каким образом это можно реализовать? Код для события .

задан 13 янв 2021 в 7:21
260 показов

Магазин на Discord.py

Я пишу магазин для своего сервера Discord. У меня возникла проблема с добавлением роли в магазин. Буду очень благодарен, если вы мне поможете. @Client.command() async def shop(ctx, value=None, price=.

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

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

https://kapelnicza.vyvod-iz-zapoya-na-domu-voronezh.ru/