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

Python * Tutorial

Введение

Это вторая статья из серии статей про создание бота на основе discord.py. В этой части рассмотрим форматирование в discord, конфиги и немного про git, а к коду перейдём в следующей.

В данной части

  1. Форматирование

  2. Конфиги

  3. Git

Форматирование

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

Для начала форматирование текста, всего существует 4 стиля:

image
Форматирование текста

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

image
Спойлеры
  • Спойлер 1 – Как задать спойлер

  • Спойлер 2 – Открытый спойлер

  • Спойлер 3 – Ещё не открытый спойлер

Следующее – это цитаты. Они немного похоже на embed(могут отправлять только боты).

Есть однострочные и многострочные цитаты. Для их использования нужно поставить знак > или >>>. (Сначала что вводим, затем результат)

Цитаты

Обратите внимание, что между > и текстом обязательно должен быть пробел!

Блоки кода

Но у многострочного блока кода есть одна очень полезная фишка, он может подсвечивать синтаксис языка. Для этого после “открытия” блока, без пробела, написать язык и перенести строку(Если поставить пробел или не перенести строку, это будет обычный текст).

Подсветка синтаксиса

Иногда это можно использовать для “раскраски” какой-либо информации. Например, если использовать в качестве языка diff, то можно красиво показывать список изменений.

Полный список поддерживаемых языков можно посмотреть тут.

Иногда возникает потребность использовать, например * как символ, а не как средство форматирования, и тут к нам приходит старое доброе экранирование. Оно работает, как и во всех языках программирования путём добавления “”(Обратного слэша) перед зарезервированным символом.

Например, вот так. (В блоке, форматирование текста не работает)

Экранирование

А теперь переходим к тому, о чём многие не знают.

Ввод (текст)

Результат

Выводится ссылка без прикреплённого вложения.

<@80351110224678912>

Упоминание пользователя. Цифры(18) – ID пользователя.

<#103735883630395392>

Упоминание канала. Цифры(18) – ID канала.

<@&165511591545143296>

Упоминание роли. Цифры(18) – ID роли.

Вставка статичного эмодзи (имя и ID эмодзи).

Вставка подвижного эмодзи (имя и ID эмодзи).

Временная отметка. Цифры – количество секунд с 1 янв. (четверг) 1970 года, 3:00.

Временная отметка, но со стилем. STYLE – стиль отображения, является символом (список примеров в таблице ниже), по умолчанию f.

И сами стили для последней строчки.

STYLE

Результат

Пример синтаксиса

t

0:20

T

0:20:30

d

21.04.2021

D

21 апреля 2021 г.

f *

21 апреля 2021 г., 0:20

F

среда, 21 апреля 2021 г., 0:20

R

7 месяцев назад

Таблицы взяты отсюда.

Конфиги

Я думаю не стоит объяснять почему конфиги – это удобно. Но если вкратце, то это даёт возможность “скомпоновать” все константы в одном месте, особенно, если они используются многократно. И когда нам потребуется изменить какую-либо постоянную, нам не придётся лазить по всему проекту, в поиск куска кода, который отвечает за нужную нам задачу.

Существует множество возможных реализаций конфига. Можно использовать библиотеки, класс, поля которого будут являться нашими константами. Это полностью дело вкуса, в своих проектах я использую самый простой подход – файл с константами.

Модель ветвления

Это ещё не всё

Если есть ещё темы, которые можно было бы можно рассказать в этой статье, пишите в комментарии, с радостью распишу.

Следующие части

  • Часть 1

  • Часть 2 (Текущая)

69 голосов 1 ответ событие on_ready и on_message никогда не запускается? Моя идея – это класс, который обрабатывает все входящие и исходящие сообщения на сервере разногласий. Так что в дальнейшем я могу использовать это в тандеме с другим каналом типа IRC для их синхрон… 69 голосов 1 ответ Проблема с подкомандами: ctx.invoked_subcommands всегда отсутствует EDIT: найдено решение Попробуйте изменить имена подкоманд на _enabled и _disabled и передать name=”enabled” name=”disabled” в декораторы команд. Это предположение, но иногда имена, которые Bot испо… 69 голосов 1 ответ Чувствительная к регистру проверка словаря с помощью lower() Я пытаюсь использовать lower() поэтому имена ролей не чувствительны к регистру. Поэтому, если пользователь вводит lol вместо LoL он не будет проходить через оператор if not role_id: Вот как я это д… 69 голосов 2 ответа Как сделать бота DM списком людей? (Discord.py) (переписать) Таким образом, это отправляет DM тому, кто я @mention. @bot.command(pass_context=True) async def pm(ctx, user: discord.User): await user.send(‘hello’) Как я могу изменить это сообщение на список ид… 85 голосов 1 ответ Объект “Актив” не имеет атрибута “setswith” при использовании avatar_url с create_webhook У меня есть команда, которая создает webhook, создание webhook и name works find, но когда я добавляю avatar и устанавливаю его в качестве URL ‘Asset’ object has no attribute ‘startswith’ аватара у… 69 голосов 1 ответ У вас возникли проблемы с командой очистки в Discord-Rewrite Как вы можете видеть по названию, у меня возникают проблемы с Discord-Rewrite. Я смотрел страницу api в течение последних нескольких дней, в нескольких серверах API разломов, которые искали помощь … 97 голосов 1 ответ Использование Discord.py переписать, чтобы удалить сообщения Как говорится в заголовке, я пытаюсь удалить сообщения с помощью моей команды! Purge. У меня уже есть это: @bot.command() @commands.has_permissions(manage_messages=True) async def purge(ctx): await… 97 голосов 1 ответ Есть что-то вроде onFirendRequestAccepted? Я начинаю работать с Discord API через модуль discord.py. Я прошел через документы, но я не нашел ничего подобного. Итак, вот вопрос: Есть ли какой-нибудь триггер событий, например onFirendRequestA… 69 голосов 2 ответа Удаление определенных сообщений, которые были отправлены ботом и отправлены пользователем. Discord.py переписать У меня много проблем с перезаписью discord.py и его миграцией. Я посмотрел на переход на сайт v1.0, и он сказал, что нужно добавить message.delete(), и я так и сделал, но понял, что это не работает… 120 голосов 1 ответ Discord.py – Вставить параметр thumbnail – Как получить пользовательские аватары для команды Это единственная строка кода, которая не работает: embed.set_thumbnail(user.avatar_url) Он говорит, что 2 аргумента были даны, когда я исправил его, возможно, из-за синтаксического сахара или некот… -5 голосов 2 ответа AttributeError: объект “NoneType” не имеет атрибутов “каналы” Привет, у меня проблема с модулем для моего босса Discord. Я получаю AttributeError: ‘NoneType’ object has no attribute ‘channels’ Я не уверен, что он выбрасывает эту ошибку: Вот с чем я работаю: f… 119 голосов 1 ответ discord.py переписать | Делать ошибки для моих команд Теперь, когда я закончил свои команды модерации [в основном], я пытаюсь добавить ошибки. Я уже допустил ошибку “пожалуйста, укажите участника”, но мне не удается заставить бота сказать “этот участн… 119 голосов 1 ответ Получение сообщения об ошибке “_io.BufferedReader” объект не имеет атрибута “setswith” при загрузке локального изображения на аватар webhook Я пытаюсь использовать локальное изображение в качестве аватара для веб-крючка в качестве веб-крючка, веб-хуки не допускают ссылки на изображения в качестве аватара, но использование локального изо… -7 голосов 1 ответ Есть ли способ, которым я могу отменить бан используя Discord.py Rewrite Bot? Как создать команду unban в Discord.py? Переписать? Я хотел очистить свой вопрос, потому что нет команды bot.unban (возможно, она есть), а игрока нет в списке, поэтому я могу упомянуть пользователя… 84 голоса 1 ответ Как изменить имя пользователя/аватара бота с помощью Discord.py rewrite? Я искал, как это сделать, но, похоже, единственные решения, которые я нашел, не помогли. 85 голосов 4 ответа Как конвертировать имя пользователя в идентификатор диска? У меня есть простые вопросы о раздоре. Я пытаюсь создать экономическую систему, и она работает хорошо, но я хочу немного ее настроить. Я использую этот персональный модуль: https://github.com/Rappt… 98 голосов 1 ответ таймер сообщения pymongo + discord не работает хорошо вместе В настоящее время я пытаюсь сделать таймер сообщений для разлада, в основном, что я хочу, когда пользователь устанавливает таймер сообщения, я хочу, чтобы сообщение отправлялось каждые x секунд, но… 120 голосов 2 ответа Как добавить коэффициент? Привет, я хочу добавить соотношение к моему подсчету голосов. В настоящее время я создаю музыкальный модуль. Музыкальные команды, такие как пауза, пропуск, громкость и т.д., Основаны на реакциях (e… 97 голосов 2 ответа Печать пользователей на консоль, исключая тех, у кого есть аватары по умолчанию Discord.py Как я могу начать печатать для консоли список пользователей на моем сервере, за исключением тех, у кого есть аватар по умолчанию /null? Мой текущий код выглядит так, но не работает. Он печатает спи… 119 голосов 1 ответ Как добавить подсчет голосов к реакции? Привет, я работаю над музыкальным cog, и я выясняю, как сделать простой пропущенный голос. То, что я пытаюсь достичь, состоит в том, что когда 4 члена реагируют на реакцию пропуска, if control == ‘… 69 голосов 1 ответ Как получить автоматическое обновление VPS на git push Поэтому у меня есть проект python на моем VPS, который я хочу всегда запускать, и когда я нажимаю обновление через git, он обновляет его файлы и перезагружается. Как мне это сделать? (Репликация бо… 109 голосов 1 ответ Как добавить список из текстового файла для вставки? Привет, я пытаюсь вставить некоторый контент из.txt файла в список для встраивания, но у меня возникла проблема, чтобы отобразить его в виде списка в команде! Changelog. Я получаю эту ошибку: raise… 69 голосов 2 ответа Асинхронный REST API внутри Discord.py Я ищу способ интеграции REST API в мой Discord.py , используя ветвь перезаписи. Я хочу использовать aiohttp для обработки запросов, но я не уверен, какой подход я должен использовать. Цель состоит … 98 голосов 1 ответ Discord.py selfbot: как удалить сообщение сразу после отправки? Как я могу это сделать, когда он отправляет сообщение, где он привязывает всех, он удаляет сообщение сразу после? Здесь код: import discord from discord.ext import commands class MentionBomb: def _… 85 голосов 2 ответа ТипError от импорта discord.py Я только что установил ветку перезаписи discord.py, но попытка использовать import discord или from discord.ext import commands просто приводит к типу TypeError. Traceback (most recent call last): … 84 голоса 1 ответ Почему команды on_message останавливают работу? В принципе, все работает нормально и запускается, но по какой-то причине я не могу назвать какие-либо команды. Я смотрю вокруг в течение часа и смотрю на примеры/смотрю видео, и я не могу за всю жи… 128 голосов 1 ответ Добавление ролей дважды в ответ на вопрос В настоящее время я on_raw_reaction_add событие on_raw_reaction_add котором, если пользователь добавляет реакцию на сообщение, это дает ему роль. У меня небольшая проблема, когда пользователь добав… 97 голосов 1 ответ Возвращаемый тип subpods.img Я хочу, чтобы мой код запросил wolfram и получил изображение, которое он возвращает. Но тип возвращаемого API wolfram не соответствует моим требованиям. subpods.img возвращает объект карты классов…. 70 голосов 1 ответ Как проверить, есть ли текстовый канал в категории? API-интерфейс Discord Rewrite для Bot Я пытаюсь сделать функцию билета на Discord на моем боте, и мне было интересно, как я могу проверить определенную категорию, существует ли текстовый канал, и если это произойдет, то билет не будет … 128 голосов 1 ответ Удалить ошибку “команда не найдена”. Discord.py В discord.py переписывайте бота, если кто-то набирает префикс ботов, а затем текст после него, если текст не найден как команда, вы получите Ignoring exception in command None: discord.ext.commands… 69 голосов 1 ответ Есть ли более простой способ сделать встраивание с помощью команды? | discord.py REWRITE Я настраиваю новую команду, которую я хотел бы добавить в хорошую вставку. Это работает, если каждый аргумент состоит из 1 слова. Однако для цветов, таких как dark red и dark magenta , он считается… 145 голосов 1 ответ Нет Категория: help Показывает это сообщение. Введите команду help для получения дополнительной информации о команде. Вы также можете ввести! Help category для получения дополнительной информации о категории Я перешел с обычного discord.py на версию перезаписи, и у меня была специальная команда справки, которую я создал. Теперь, всякий раз, когда я отправляю сообщение, он приводит это вместе с кодовым … 84 голоса 2 ответа Как получить каждый текстовый и речевой канал и запретить всем читать, а затем разрешить другую роль читать и отправлять? Я задавался вопросом, как, когда бот добавляется в гильдию, я могу заставить его получить каждый текстовый и речевой канал, а затем запретить всем пользователям читать его, но затем разрешить другу… -5 голосов 1 ответ Как создать таймер отключения в моем музыкальном боте python discord? Я возился с разбойником, который я получил из github. Я застреваю при попытке создать таймер для того, чтобы бот оставил речевой канал, если команда /play не была выполнена в течение 5 минут. Длинн… 109 голосов 1 ответ Добавление реакции на сообщение. Discord.py переписать Я пытаюсь добавить реакцию на сообщение с пользовательскими смайликами, по какой-то причине я не могу найти много онлайн по этому поводу, и я потратил последние 30 миллионов, пытаясь найти разные п… 69 голосов 2 ответа Устранение неполадок discord.py 1.0 Я пытаюсь установить discord.py 1.0 в pythonista на моем iPad с помощью StaSh, и до сих пор ничего, что я нашел в Интернете, не работал. Пожалуйста, не говорите мне, что этот вопрос является клоном… 85 голосов 2 ответа Аргумент TypeError: format() после ** должен быть сопоставлением, а не Attachment Привет, я пытаюсь исправить проблему с модулем журнала с моим боссом раздора. Я получаю ошибку TypeError: format() argument after ** must be a mapping, not Attachment cogscore.py”, line 351, in on… 153 голоса 2 ответа Discord Я не могу найти способ присоединиться к сообщению участника Я пытался сделать участника в сообщении присоединиться в discord.py (переписать) я получаю сообщение об ошибке. Сначала моя команда ниже. @bot.event async def on_member_join(member): guild = member… 119 голосов 1 ответ Python: Как использовать переменные в строке, извлеченной из json файла? Таким образом, у меня есть строка, хранящаяся в файле JSON, но когда я втягиваю ее в свой код Python, есть некоторые части, которые я хочу заменить переменными. Как мне это сделать? Вот то, что у м… 85 голосов 1 ответ удалять сообщения пользователя в discord-rewrite.py Предполагается, что эта команда должна удалить указанное количество сообщений, но вместо этого я получаю сообщение об ошибке: Ignoring exception in command clear: Traceback (most recent call last):…

Я пробежался python3 -m pip install -U discord.py но он установил только discord.py v0.16.x. Как мне установить новый discord.py rewrite v1.0 ?

Я деинсталлировал старый discord.py с помощью pip uninstall discord.py и заново перебандил pip для установки discord.py, только чтобы снова получить версию v0.16.x вместо новой версии v1.0.

python anaconda discord discord.py discord.py-rewrite    04 июня 2018 в 18:06

18 ответов

  • discord.py rewrite удалить сообщение автора

    Как бы мне удалить сообщение, которое триггернула функция в discord.py? Я бы хотел, чтобы она удалила !test и затем продолжила функцию. EDIT: Решением является await ctx.message.delete()

  • Не удается установить discord.py с помощью pip

    У меня Python 3.8 и каждый раз, когда я пытаюсь установить discord.py с py -3 -m pip install -U discord.py он говорит: > File “”, line 1 pip install -U git+https://github.com/Rapptz/discord.py@rewrite#egg=discord.py[voic ^ SyntaxError: invalid syntax

Попробуйте использовать

что должно перейти в ветку rewrite репозитория discord.py и получить файл яйца для установки.

    04 июня 2018 в 19:43

Или если не работает:

    14 ноября 2018 в 12:21

По состоянию на 2021 год команда установки по умолчанию:

установит команду “rewrited” (>1.0) версии discord.py

Для обновления используйте команду обновления:

    19 июля 2021 в 20:23

Откройте Command Prompt и наберите in;

pip install discord.py

или;

pip install discord.py==1.0.1

И дальше если хотите голос сделайте;

pip install discord.py[voice]

    09 мая 2019 в 06:11

Попробуйте:

Или:

Если вы используете PyCharm думаю вам стоит использовать 2-й

    03 июня 2020 в 15:58

Если вы хотите обновиться до самой последней версии можно использовать:

    05 марта 2020 в 20:07

Для действительно простого способа. Просто наберите вот это в вашей командной строке или терминале.

И вам стоит установить вот это тоже

И когда вы собираетесь его импортировать просто используйте вот это

    14 февраля 2021 в 06:54

pip install discord.py установка из исходников[branch:master] не рекомендуется так как находится в фазе тестирования(написание по состоянию на 30.05.2021).Если хотите протестировать кнопки тогда обязательно идите вперед и выполните pip install -U git+https://github.com/Rapptz/discord.py@master

    30 мая 2021 в 08:52

Я считаю, что discord.py rewrite официально опубликован на основе его формальной информации о сайте.

Так что, команда для установки модуля станет довольно легкой.

Если вы хотите установить конкретную версию. (самая новая на данный момент – 1.3.4)

Если у вас возникает вопрос с pip, что cmd не может распознать вашу команду pip, то сделайте так:

(но вам нужно иметь pip сначала все равно).

На основе своего сайта, discord.py сбрасывает поддержку python 3.4, он поддерживает только python 3.5-3.8. Надеюсь, эта информация могла бы помочь. 🙂

    31 июля 2020 в 03:37

  1. Заходите на python.org и нажимаете на скачать python.

  2. Теперь, открываете и запускаете его. Убедитесь, что вы добавляете python в путь. Нажимаете на Install. Один раз установили вы можете его закрыть.

  3. Переходите на git-scm.com и нажимаете на Download for Windows.

  4. Один раз установили открываете его. Убедитесь, что выбран Use git from windows command prompt. Потом после нажатия на next на все нажимаете на install.

  5. Один раз установка закончена, жмете finish.

  6. Копируете ваш адрес скрипта. В моем случае это был Local//Programs//Python//Python39//Scripts

  7. Открываете вашу командную строку и набираете cd Local//Programs//Python//Python39//Scripts. Вставляете туда свой адрес, мой у вас не будет работать. Hit Enter.

  8. Затем набираете py -3 -m pip install -U discord.py. Жмете enter еще раз. Один раз установка закончена закрываете командную строку.

    24 октября 2020 в 15:53

  • Как установить библиотеку discord.py

    Хочу установить библиотеку discord.py, но получаю следующую ошибку; >>> $ pip install -U discord.py File , line 1 $ pip install -U discord.py ^ SyntaxError: invalid syntax >>> Я вот-вот сойду с ума, может ли какой-нибудь профи, или просто человек с какими-то большими…

  • Баг на цикле через несколько часов Discord.py rewrite (python)

    Во первых я французский, поэтому извините за мой плохой английский У меня проблема. У меня не получилось сделать нормальный Discord.py loop поэтому я сделал один сам: @client.event async def on_ready(): game = discord.Game(f”{bot_version} | {len(client.guilds)} serveurs”) await…

Попробуйте типизировать py -3.9 -m pip install discord.py[voice] --extra-index-url https://gorialis.github.io/pip/ в вашем CMD/Terminal. У меня это сработало. Кредитуйтесь на @Gorilas On Github.

    03 декабря 2020 в 17:06

Если у вас тоже проблемы со всем вышеперечисленным установите python с помощью Microscoft Store и используйте команды выше в command prompt

    08 января 2021 в 02:09

Легко, откройте Command Prompt и наберите “pip install discord.py” Если вы делаете что вам скорее всего захочется “pip install requests” Если команда pip не работает, откройте ваш установщик python и убедитесь нажмите на опцию add to evironment variables! Вот и все ваше добро пойдет! Используйте Visual Studio Code или Atom, они лучшие пока что, что я использовал для своего бота!

    01 июня 2020 в 16:04

Откройте CMD и перейдите в папку вашего дискорд бота напр.:

cd C:UsersmaxDesktopDiscordBot

Далее наберите вот это в CMD: pip install discord.py Это должно работать

    17 сентября 2020 в 06:19

Вот так должно работать:

Однако если что не удастся рекомендую обновить pip и попробовать еще раз.

    05 января 2021 в 12:25

Используйте:

    05 ноября 2020 в 20:43

Ит очень лёгкий на самом деле. Откройте command prompt и напишите:

После этого если хотите озвучку:

    07 апреля 2021 в 13:31

Убедитесь, что Python есть в вашем системном PATH.

    03 ноября 2020 в 17:48 Как изменить из Discord.py async на rewrite во время использования Heroku?

Мне нужна некоторая помощь с миграцией с Heroku так как я добавил git+https://github.com/Rapptz/discord.py@rewrite#egg=discord.py[voice] в мой файл requirements.txt и я запутался как когда я так…

Discord.py как из discord.py трансформировать str в определенный тип

Я пытаюсь задать разрешение сервера, с помощью того кода a wait ctx.guild.edit(verification_level=line) , но получаю ту ошибку verification_level field must be of type VerificationLevel . Я так…

Как использовать гильдию. с фоновыми задачами? discord.py

Как использовать гильдию. с фоновыми задачами? discord.py rewrite Например: async def create_role(): guild = ctx.guild roles = ctx.guild.roles if game != roles: color = %06x % random.randint(0,…

discord.py rewrite удалить сообщение автора

Как бы мне удалить сообщение, которое триггернула функция в discord.py? Я бы хотел, чтобы она удалила !test и затем продолжила функцию. EDIT: Решением является await ctx.message.delete()

Не удается установить discord.py с помощью pip

У меня Python 3.8 и каждый раз, когда я пытаюсь установить discord.py с py -3 -m pip install -U discord.py он говорит: > File “”, line 1 pip install -U…

Как установить библиотеку discord.py

Хочу установить библиотеку discord.py, но получаю следующую ошибку; >>> $ pip install -U discord.py File , line 1 $ pip install -U discord.py ^ SyntaxError: invalid syntax…

Баг на цикле через несколько часов Discord.py rewrite (python)

Во первых я французский, поэтому извините за мой плохой английский У меня проблема. У меня не получилось сделать нормальный Discord.py loop поэтому я сделал один сам: @client.event async def…

Проблема с установкой discord.py 1.0

Я пытаюсь установить discord.py 1.0 в pythonista на мой iPad со StaSh и пока что, ничего что я нашел в интернете не сработало. Пожалуйста, не подскажите, что это за вопрос клон этого одного Как…

Как сделать чтобы бот задавал slowmode для канала в discord.py rewrite?

Как сделать так, чтобы бот задавал медленный режим для канала в discord.py переписать? Я пробовал сделать так: ctx.channel.slowmode_delay = 10 Это не получало никакой ошибки, но когда я вызывал…

22.12.2020 в 21:12

Из этого туториала Вы узнаете, как полностью создать собственного бота Discord в облаке.

Вам не нужно ничего устанавливать на свой компьютер, и вам не нужно ничего платить за размещение своего бота.

Мы будем использовать целый ряд инструментов, в том числе Discord API, библиотеки Python, и платформы облачных вычислений под названием Repl.it.

Как создать учетную запись Discord Bot

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

Вот шаг к созданию учетной записи Discord Bot.

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

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

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

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

5. Перейдите на вкладку «Бот» и нажмите «Добавить бота». Вам нужно будет подтвердить действие, нажав «Yes, do it!»

Оставьте настройки по умолчанию для Public Bot и Require OAuth2 Code Grant.

Ваш бот создан. Следующим шагом будет копирование токена.

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

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

Как пригласить вашего бота присоединиться к серверу

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

Перейдите на вкладку «OAuth2». Затем выберите «бот» в разделе «scopes».

Теперь выберите нужные разрешения для бота. Наш бот будет в основном использовать текстовые сообщения, поэтому нам не нужно много разрешений. Вам может потребоваться больше, в зависимости от того, что вы хотите, чтобы ваш бот делал. Будьте осторожны с разрешением «Администратор».

После выбора соответствующих разрешений нажмите кнопку «Copy» над разрешениями. Это скопирует URL-адрес, который можно использовать для добавления бота на сервер.

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

Чтобы добавить бота, вашей учетной записи необходимы разрешения «Управление сервером».

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

Как написать код для базового бота Discord с помощью библиотеки discord.py

Мы будем использовать библиотеку Python discord.py, чтобы написать код для бота. discord.py – это оболочка API для Discord, которая упрощает создание бота Discord на Python.

Как создать реплику и установить disocrd.py

Вы можете разработать бота на своем локальном компьютере с помощью любого редактора кода. Однако в этом уроке мы будем использовать Repl.it, потому что это упростит всем пользователям следовать его указаниям. Repl.it – ​​это онлайн-среда IDE, которую вы можете использовать в своем веб-браузере.

Создайте новый Repl и выберите «Python» в качестве языка.

Чтобы использовать библиотеку discord.py, просто напишите import discord  вверху main.py. Repl.it автоматически установит эту зависимость, когда вы нажмете кнопку «Run».

Если вы предпочитаете кодировать бота локально, вы можете использовать эту команду в MacOS для установки discord.py:

python3 -m pip install -U discord.py

Возможно, вам придется использовать pip3 вместо pip.

Если вы используете Windows, вы должны вместо этого использовать следующую строку:

py -3 -m pip install -U discord.py

Как настроить события Discord для вашего бота

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

Сделаем бота, который отвечает на конкретное сообщение. Этот простой код бота вместе с объяснением кода взят из документации discord.py. Позже мы добавим в бота дополнительные функции.

Добавьте этот код в main.py. (Вы можете назвать файл как-нибудь иначе, только не discord.py.) Я вскоре объясню, что делает весь этот код.

import discord import os  client = discord.Client()  @client.event async def on_ready():     print('We have logged in as {0.user}'.format(client))  @client.event async def on_message(message):     if message.author == client.user:         return      if message.content.startswith('$hello'):         await message.channel.send('Hello!')  client.run(os.getenv('TOKEN')) 

Когда вы создали своего пользователя-бота в Discord, вы скопировали токен. Теперь мы собираемся создать файл .env для хранения токена. Если вы запускаете свой код локально, вам не нужен файл .env. Просто замените os.getenv('TOKEN') токеном.

.env файлы используются для объявления переменных среды. На Repl.it большинство создаваемых вами файлов видны всем, но .env файлы видны только вам. Другие люди, просматривающие публичный ответ, не смогут увидеть содержимое файла .env.

Поэтому, если вы разрабатываете на Repl.it, включайте в файл .env только личную информацию, такую ​​как токены или ключи.

Нажмите кнопку «Добавить файл» и создайте файл с именем .env.

Внутри файла добавьте следующую строку, включая ваш фактический токен, который вы скопировали ранее:

TOKEN=[paste token here] 

Теперь давайте рассмотрим, что делает каждая строка в коде вашего бота Discord.

  1. Первая строка импортирует библиотеку discord.py.
  2. Вторая строка импортирует библиотеку os, но она используется только для получения переменной TOKEN из файла .env. Если вы не используете .env файл, эта строка вам не нужна.
  3. Затем мы создаем экземпляр Client. Это связь с Discord.
  4. Декоратор @client.event() используется для регистрации события. Это асинхронная библиотека, поэтому все делается с помощью обратных вызовов. Обратный вызов – это функция, которая вызывается, когда происходит что-то еще. В этом коде событие on_ready() вызывается, когда бот готов к использованию. Затем, когда бот получает сообщение, вызывается событие on_message().
  5. Триггер событий каждый раз вызывает on_message(), когда принимается сообщение, но мы не хотим, что-то делать, если сообщение от самих себя. Поэтому, если Message.author это то же самое, что и Client.user, просто делаем return.
  6. Затем мы проверяем Message.content, начинается ли с '$hello'. Если да, то бот отвечает 'Hello!' в канал, в котором он использовался.
  7. Теперь, когда бот настроен, последняя строка запускает бот с токеном входа. Он получает токен из файла .env.

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

Как запустить бота

Теперь нажмите кнопку запуска вверху, чтобы запустить своего бота в repl.it.

Если вы пишете бота локально, вы можете использовать эти команды в терминале для запуска бота:

В Windows:

py -3 main.py

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

python3 main.py

Теперь перейдите в свою комнату в Discord и введите «$hello». Ваш бот должен ответить «Hello!».

Как улучшить бота

Теперь, когда у нас есть базовый бот, мы его улучшим. Не зря он называется «Encourage Bot».

Этот бот будет отвечать сообщением ‘Hello!’ всякий раз, когда кто-то отправляет сообщение, содержащее грустное или удручающее слово.

Любой желающий сможет добавить ободряющие сообщения для использования бота, а отправленные пользователем сообщения будут храниться в базе данных Repl.it.

Бот также вернет случайную вдохновляющую цитату из API, когда кто-то наберет в чате сообщение «$inspire».

Мы начнем с добавления функции «$inspire».

Как добавить в бота вдохновляющие цитаты

Мы будем получать вдохновляющие цитаты из API под названием zenquotes.io. Нам нужно импортировать еще пару модулей Python, добавить функцию get_quote() и обновить код нашего бота, чтобы вызвать функцию.

Вот обновленный код. После кода я объясню новые части.

import discord import os import requests import json  client = discord.Client()  def get_quote():   response = requests.get("https://zenquotes.io/api/random")   json_data = json.loads(response.text)   quote = json_data[0]['q'] + " -" + json_data[0]['a']   return(quote)  @client.event async def on_ready():   print('We have logged in as {0.user}'.format(client))  @client.event async def on_message(message):   if message.author == client.user:     return    if message.content.startswith('$inspire'):     quote = get_quote()     await message.channel.send(quote)  client.run(os.getenv('TOKEN'))

Теперь нам нужно импортировать модуль requests. Этот модуль позволяет нашему коду делать HTTP-запрос для получения данных из API. API возвращает JSON, и модуль json упрощает работу с возвращенными данными.

Функция get_quote() очень проста. Во-первых, она использует модуль запросов для запроса данных из URL-адреса API. API возвращает случайную вдохновляющую цитату. Эту функцию можно легко переписать для получения котировок из другого API, если текущий перестанет работать.

Затем внутри функции мы используем json.loads() для преобразования ответа API в JSON. Методом проб и ошибок я понял, как перевести цитату из JSON в нужный строковый формат. Цитата возвращается из функции в виде строки.

Последняя часть кода обновляется ближе к концу. Ранее он искал сообщение, которое начиналось с «$hello». Теперь он ищет “$inspire”. Вместо того, чтобы возвращать «Hello!», Он получает цитату quote = get_quote() и возвращает цитату.

На этом этапе вы можете запустить свой код и попробовать его.

Как добавить в бота обнадеживающие сообщения

Теперь мы реализуем функцию, при которой бот отвечает обнадеживающими сообщениями, когда пользователь отправляет сообщение с грустным словом.

Как добавить грустные слова в бота

Для начала нам нужно создать список Python, содержащий грустные слова, на которые будет отвечать бот.

Добавьте следующую строку после создания переменной client:

sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]

Не стесняйтесь добавлять в список больше слов.

Как добавить в бота обнадеживающие сообщения

Теперь мы добавим список ободряющих сообщений, которыми бот ответит.

Добавьте следующий список после созданного вами списка sad_words:

starter_encouragements = [   "Cheer up!",   "Hang in there.",   "You are a great person / bot!" ] 

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

Как отвечать на сообщения

Теперь нам нужно обновить нашего бота, чтобы он использовал два созданных нами списка. Во-первых, импортируйте модуль random, потому что бот будет случайным образом выбирать сообщения из списка. Добавьте следующую строку в операторы импорта в верхней части кода:

import random

Теперь мы обновим функцию on_message(), чтобы проверять все сообщения, чтобы увидеть, содержат ли они слово из списка sad_words. Если будет найдено грустное слово, бот отправит случайное сообщение из списка.

Вот обновленный код:

async def on_message(message):   if message.author == client.user:     return    msg = message.content    if msg.startswith('$inspire'):     quote = get_quote()     await message.channel.send(quote)        if any(word in msg for word in sad_words):     await message.channel.send(random.choice(starter_encouragements)) 

Это хорошее время для тестирования бота. Теперь вы знаете достаточно, чтобы создать собственного бота. 

Источник:

  • How to Create a Discord Bot for Free with Python – Full Tutorial

#Python

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

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

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

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

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

pip3 install discord.py

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

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

image

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

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

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

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

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

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

Запускаем нашего бота, в аргументы передаём токен бота.

Старший разработчик в команду IaaS (Cloud) tproger.ru Вакансии на tproger.ru

Надеюсь вы разобрались с кодом, и мы можем переходить далее.

Обработка команд

Перед тем, как обрабатывать команды, нам пригодится наш префикс.

Рассмотрим код:

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

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий