Создание бота на основе discord.py. Часть 1
Это первая статья про создание бота для Discord. В конце статьи находятся ссылки на следующие части, со временем они будут дополняться. Статьи следуют друг за другом, без каких-либо «информационных дыр». Если нашли опечатку или неточность, отпишите о проблеме в комментариях или в личных сообщениях, максимально оперативно всё поправим! А теперь переходим непосредственно к созданию бота.
В данной части
- Создание тестового сервера
- Включение режима разработчика
- Создание приложения и получение токена
- Добавление бота на сервер
- Установка библиотеки discord.py
- Первые строчки кода
Создание сервера
Гайд будет максимально подробный, поэтому и начинать будем с создания тестового сервера. Зачем он нужен? Лишь для вашего удобства и безопасности, если у вас уже есть большой сервер, тем более не стоит сразу добавлять на него разрабатываемого бота. Никто не защищён от багов и дыр в безопасности.

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

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

В категории «Настройки приложения» ищем «Расширенные«.

И включаем режим разработчика.

Получение токена
Для начала нам нужно зайти на страницу создание приложений и нажать New Application.

После этого вам предложат назвать ваше приложение (Потом можно будет изменить).

После создания, попадаем на страницу настройки приложения. В меню выбираем «Bot«.

На данной странице нажимаем на «Add Bot«. Скопируем токен и сохраним его.

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

Добавление бота на сервер
В меню ищем пункт OAuth2 –> URL Generator.

В поле SCOPES выбираем bot и applications.commands. В появившемся ниже поле выбираем Administrator, это более удобно для тестирования. Но когда бот будет работать в продакшене, лучше выставлять только те права, которые правда нужны, потому что никто не защищён от потери токена, а с правами администратора это может стать очень большой проблемой.

Копируем появившеюся ниже ссылку и вставляем в адресную строку браузера. Если у вас не выполнен вход в браузере, его необходимо произвести. После чего выбираем тестовый сервер из списка и нажимаем «Продолжить» и далее «Авторизовать«.

Ура! Наш бот на тестовом сервере!

Установка библиотеки
Для начала нужно установить python, данный этап не расписан, но желательно установить версию 3.10 (Последняя версия на момент написания 3.10.5). Если у вас Windows, для проверки можете использовать следующую команду
py --version
В ответ получите версию вашего python. Устанавливать будем не стабильную, а разрабатываемую версию, для этого пропишем следующую команду. (Это можно делать уже внутри проекта). Хотя некоторые IDE устанавливаю git вместе с собой, можете скачать его отдельно.
py -m pip install git+https://github.com/rapptz/discord.py
Если всё же хотите установить стабильную, релизную версию, пропишите следующую команду.
py -3 -m pip install -U discord.py py -3 -m pip install -U discord.py[voice]
Подробнее про установку библиотеки и саму библиотеку можно прочитать тут.
Первые строчки кода
Пришло время писать код! Программирование в статьях будет происходить в PyCharm, хоть это и довольно тяжёлая IDEA, она удобная и бесплатная для студентов.
Не советую создавать проект через внутренний интерфейс, может появиться множество ненужных папок и файлов, вместо этого создадим папку проекта вручную и откроем как пустой проект.
Для этого заходим в PyCharm, далее File –> Open.

P.s. Не обращайте внимания на другую тему IDE.
В появившемся окне ищем созданную папку, выбираем её и нажимаем «Ok«. Обратите внимание на то, что нужно просто нажать по папке, а не проваливаться в неё.

Если PyCharm автоматически не создал main.py, создайте его вручную.
Вставляем код ниже и запускаем.
import discord # Подключаем библиотеку from discord.ext import commands intents = discord.Intents.default() # Подключаем "Разрешения" intents.message_content = True # Задаём префикс и интенты bot = commands.Bot(command_prefix='>', intents=intents) # С помощью декоратора создаём первую команду @bot.command() async def ping(ctx): await ctx.send('pong') bot.run('token')

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

Идём в дискорд и используем нашу первую команду.

Немного объясним данную структуру. Поскольку это обычная команда, вся информация хранится в ctx(Переменная одноимённого класса). Она имеет следующие поля:
['args', 'author', 'bot', 'channel', 'cog', 'command', 'command_failed', 'guild', 'invoked_parents', 'invoked_subcommand', 'invoked_with', 'kwargs', 'me', 'message', 'prefix', 'subcommand_passed', 'valid', 'voice_client']
И следующие команды:
['fetch_message', 'history', 'invoke', 'pins', 'reinvoke', 'reply', 'send', 'send_help', 'trigger_typing', 'typing']
Если вы знакомы с синтаксисом языка, то данный список можно получить с помощью встроенной функции dir.
print(dir(ctx))
На более правильно прочитать документацию про Context.
Заключение
Сразу отвечу всем комментаторам. Да — подобных статей море, в том числе есть официальная документация. Но поскольку в моих планах есть создать серию статей, я хотел бы, что бы в них было описано всё, начиная с самых азов.
И небольшое примечание. Статьи строятся на основании того, что у вас есть опыт и знания программирования на python.
Исходник Личные комнаты | Discord bot
Система личных комнат для дискорд бота (Discord.py)
API:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Доступна автоматическая настройка при запуске, а также ручная настройка командами:
temp_category_set
— ID категории, в которой будет располагаться система личных комнат
temp_rooms_set
— ID комнаты, при переходе в которую будет создаваться новая личная комната зашедшего.
Автоматическая настройка задаётся в строчках default_room_category_id, default_room_creator_id с соответствующими значениями
Создателю комнаты автоматически будет выдано право управлять его комнатой.
from discord.ext import commands # You can set default values, if u want default_rooms_initted = False default_room_category_id = 804067147391172658 default_room_creator_id = 804269486899331104 room_category = None room_creator = None # https://discordpy.readthedocs.io/en/latest/api.html#discord.abc.GuildChannel.delete async def delete_channel(guild, channel_id): channel = guild.get_channel(channel_id) await channel.delete() # https://discordpy.readthedocs.io/en/latest/api.html#discord.Guild.create_voice_channel async def create_voice_channel(guild, channel_name): channel = await guild.create_voice_channel(channel_name, category=room_category) return channel def init_rooms(): if default_room_category_id != -1: category_channel = client.get_channel(default_room_category_id) if category_channel: global room_category room_category = category_channel if default_room_creator_id != -1: create_channel = client.get_channel(default_room_creator_id) if create_channel: global room_creator room_creator = create_channel global default_rooms_initted default_rooms_initted = True #https://discordpy.readthedocs.io/en/latest/api.html#discord.Guild.get_channel @client.command(aliases = ['temp_category_set']) async def __temp_category_set (ctx, id): category_channel = client.get_channel(int(id)) if category_channel: global room_category room_category = category_channel @client.command(aliases = ['temp_rooms_set']) async def __temp_rooms_set (ctx, id): create_channel = client.get_channel(int(id)) if create_channel: global room_creator room_creator = create_channel # https://discordpy.readthedocs.io/en/latest/api.html#discord.on_voice_state_update @client.event async def on_voice_state_update(member, before, after): if not default_rooms_initted: init_rooms() if not room_category: print("Set 'Temp rooms category' id first (temp_category_set)") return False if not room_creator: print("Set 'Temp rooms creator' id first (temp_rooms_set)") return False if member.bot: return False # If user joined to the room creator channel if after.channel == room_creator: channel = await create_voice_channel(after.channel.guild, f' room') # create new voice channel in temp rooms category if channel is not None: # if we successfully created our new voice room await member.move_to(channel) # move member to new room await channel.set_permissions(member, manage_channels=True) # set perm-s to the member # If user leaved temp room if before.channel is not None: if before.channel != room_creator and before.channel.category == room_category: if len(before.channel.members) == 0: await delete_channel(before.channel.guild, before.channel.id)
Создание, вход и выход из комнаты в Discord
Дискорд – мессенджер, который помогает искать собеседников по группам, которые разбросаны по интересам. Приложение разработано, и вошло в эксплуатацию пользователей в 2015 году, но регулярно развивается, и в настоящее время сервис использует более 11 миллионов клиентов. Как правило, мессенджер привлекает геймеров, которые создают каналы в зависимости от интересов, и могут связываться при помощи аудиозвонков или видеоконференций. Функционал программы содержит большое число опций и инструментов, которые помогают оптимизировать работу.

В мессенджере Дискорд каналы разделены на две основополагающие категории, среди которых можно выделить голосовые и текстовые варианты. В голосовых каналах пользователи могут производить общение при помощи микрофона, а в текстовых вариантах клиенты могут набирать сообщения, и получать от посторонних пользователей. При этом, пользователи придумали названия подобным каналам, и зовут комнатами. При помощи подобного варианта разделения пользователи могут делиться в зависимости от требований и условий. При работе в мессенджере Дискорд следует знать, как создавать, и настраивать комнаты.
Как создать комнату в Дискорде?
Пользователи могут создавать комнаты в приложении Дискорд, чтобы использовать в зависимости от предпочтений и условий. Для того, чтобы создать комнату в мессенджере, следует проделать стандартную операцию:
- Вначале следует войти в мессенджер Дискорд. В программе следует выбрать необходимый вариант канала, и напротив комнаты следует выбрать команду со значком, который представлен в виде плюсика.
- Затем следует указать оригинальное название, по которому было бы просто искать комнату в мессенджере.
- Затем следует нажать на кнопку синего цвета, чтобы подтвердить процедуру создания канала.
- После окончания операции по созданию канала, пользователи могут добавлять необходимых участников.
- Настройки и параметры.
- Пользователи могут устанавливать настройки на каналы в зависимости от условий, и назначении.

В мессенджере Дискорд пользователи не могут устанавливать пароль на канал, поскольку подобная опция не заложена на платформе. Пользователи могут указать необходимые настройки приватности, чтобы обезопасить комнату. После того, как настройки приватности будут установлены, в комнату не смогут войти посторонние пользователи. Для того, чтобы установить настройки приватности к каналу, следует:
- Войти в программу, и выбрать необходимый канал.
- Возле значка канала следует выбрать настройки при помощи нажатия кнопки в виде значка шестеренки.
- После перехода в настройки, следует выбрать раздел из предложенного списка в меню «Права доступа».
- Затем следует отключить все пункты в разделе, и после этого можно нажимать на значки в виде плюсиков.
- Плюс следует установить напротив участников, которые смогут иметь доступ в комнату.
Бот для создания комнаты в Дискорде?
Пользователи могут использовать доступные боты, которые рассчитаны на облегчение работы в мессенджере Дискорд. Боты могут выполнять конкретные роли. При этом, пользователи могут использовать боты, чтобы создавать каналы на платформе. Боты способны взять часть ролей, чтобы пользователь получал удовольствие от работы без лишних операций. При этом, большое число ботов помогает выбирать необходимый вариант в зависимости от назначения и условий в сервисе.

MEE6 – бот, который используют пользователи для создания комнаты в мессенджере Дискорд. Помимо расширенного функционала, бот поддерживается, что разрешает регулярно развиваться. Пользователи могут пользоваться стандартным вариантом опций и инструментов, или приобрести преимиум пакет, чтобы увеличить доступный функционал. Бот отличается тем, что пользователи могут проводить настройки в зависимости от предпочтений и условий. Если пользователи регулярно работают с ботом, что уровень возрастает, и при этом, пользователь может применять дополнительный пакет опций и инструментов. Для того, чтобы начать работу с ботом, следует пригласить на сервер.
RED – бот, который обладает уникальной способностью по настройками, и поэтому пользователи выбирают вариант, чтобы управлять настройками в зависимости от необходимости. Бот работает индивидуально в зависимости от конкретно выбранного сервера, и подбирает необходимый пакет опций и услуг. Пользователи могут расширять функционал бота, скачивая плагина.
Dyno используется 1,6 миллионов серверов. Преимущество бота заключается в том, что веб-панель обладает информативностью, которая разрешает контролировать процесс настроек. Пользователи могут выбрать варианты опций и инструментов для управления настройками.

Как найти и войти в комнату в Discord?
Пользователи могут искать комнаты, которые созданы посторонними участниками программы. При этом, пользователи могут искать каналы на платформе. Облегчит процесс, если пользователь знает ID сервера. Для того, чтобы узнать номер конкретно выбранного пользователя, посторонний пользователь должен отправить при помощи приложения Дискорд, или посторонних программ. Если пользователь обладает правами администратора, то можно получить информацию, при этом, использовать вариант:
- Войти в мессенджер Дискорд.
- В приложении необходимо войти в настройки. Настройки можно найти в нижней части экрана, которые выглядят как значок с шестеренкой.
В настройках приложения следует выбрать раздел под названием «Виджет». Программа выдаст окошко, в котором будет указан номер, при помощи которого можно будет идентифицировать комнату.
Следует отметить, что в подобном окне пользователи могут управлять настройками, и указывать дополнительные элементы, например, отправлять приглашения, или создавать публикации на веб-странице API.
Как выйти из комнаты?
Пользователи могут выйти из комнаты, если пропала необходимости. При этом, нет необходимости согалашть действие с посторонними участниками канала. Для того, чтобы выйти из комнаты, следует:
- Вначале необходимо войти в мессенджер Дискорд.
- Затем зайти в конкретно выбранный канал.
- При переходе в комнату, можно увидеть меню в левой области экрана.
- В меню следует просмотреть опции, и выбрать вариант с отключением. Раздел меню «Отключить» будет выглядеть, как трубка телефона с крестиком.
Пользователи не смогут войти в канал после выхода. Единственный вариант вернуться в комнату, если создатель канала пришлет приглашение, или разрешит войти.
Как написать приватные комнаты на кнопках Discord py?
Сделать вот такую меню с эмбедом
Чтобы создать комнату надо присоединится к каналу 

После нажатия на кнопку делать запрос например редактирования названия комнаты
Сделать авто удаление ответа пользователя после того как бот его обработал
- Вопрос задан 11 мар. 2023
- 408 просмотров
2 комментария
Средний 2 комментария

Модератор @TosterModerator
Не надо ставить как можно больше тэгов. Лучше оставить один, но конкретный, с которым проблема.
См.п.3.1 Регламента.

Модератор @TosterModerator
На вопрос «как сделать» отвечает документация и поиск в интернет.
Тут отвечают на вопросы «почему я сделал, как в документации, а оно не работает. Поискал в интернет, вот запросы, в ответах не нашел. Что я делаю не так?»
Покажите, как вы пробовали решить проблему, приведите код попытки (пусть неудачной), опишите, как запускали, что ожидали и что получилось.
За готовыми решениями — на фриланс. В текущем виде это не вопрос, а задание. Нарушен п.5.12 Регламента.
Решения вопроса 0
Ответы на вопрос 1

Тесты, тесты?
Для создания приватных комнат на кнопках Discord.py, вам нужно использовать модуль discord.ui
import discord from discord.ext import commands from discord.ui import View, button class PrivateRoomView(View): def __init__(self): super().__init__() self.add_item(button(label="Создать комнату", custom_id="create_room")) self.add_item(button(label="Присоединиться к комнате", custom_id="join_room")) @button(custom_id="create_room") async def create_room(self, button: discord.ui.Button, interaction: discord.Interaction): # Здесь вы можете добавить логику для создания комнаты await interaction.response.send_message("Комната создана!") @button(custom_id="join_room") async def join_room(self, button: discord.ui.Button, interaction: discord.Interaction): # Здесь вы можете добавить логику для присоединения к комнате await interaction.response.send_message("Вы присоединились к комнате!")
Вы можете использовать этот класс PrivateRoomView в своем боте Discord.py, чтобы создать меню с кнопками для создания и присоединения к приватным комнатам.
Чтобы добавить логику для редактирования названия комнаты, вы можете добавить еще одну кнопку в PrivateRoomView и обработчик для нее, который будет выполнять запрос на редактирование названия комнаты.