Как добавить игру Discord
Любители поиграть в VoIP-мессенджере часто спрашивают, как добавить игру в Дискорд, какие функции доступны и можно ли менять название. Отдельного внимания заслуживают ошибки, которые могут появиться при попытке загрузить или установить приложение.
Как добавить игру в Discord
Для начала отметим, что доступная ранее библиотека игр Nitro больше не доступна для подписчиков. Изменения произошли с 15 октября 2019 года. Теперь в игры, полученные из этой библиотеки, играть нельзя даже в том случае, если они были установлены ранее.
В остальном ситуация не изменилась. При этом пользователи должны знать, как добавить игру в библиотеку Discord, а впоследствии правильно в нее играть.
Алгоритм действий такой:
- Войдите в программу Дискорд.
- Жмите на символ шестеренки внизу.

На последнем этапе переведите тумблер отображения в правую сторону.
Как изменить название
Пользователи часто спрашивают, как поменять название игры в Дискорде. Если она подтверждена на аккаунте, сделать это невозможно. Изменения можно осуществлять еще до загрузки, если такая опция предусмотрена разработчиком. В ином случае эта опция недоступна.
Как играть
Программа Дискорд предлагает клиентам много опций. Кратко рассмотрим их особенности.
Go Live
С помощью этой функции можно заняться стримингом на голосовом канале. Эту опцию можно добавить и использовать на ПК с Виндовс 8 или 10. Просмотр стримов доступен с приложения на компьютере или веб-версии в проводнике Хром. В мобильном варианте программы такая опция пока недоступна.
Для включения Go Live необходимо добавить игровое приложение в Дискорд по принципу, который рассмотрен выше. Обязательное условие — его распознавание системой. После этого рядом с названием появляется символ компьютера со значком видеокамеры. В этом случае выберите, что именно вы будете стримить, и укажите канал. Далее жмите на кнопку Прямой эфир, после чего появляется небольшое окно с изображением.
Перед тем как играть в Дискорде, сделайте некоторые настройки. Выделим основные:
- Установите разрешение. Для всех подписчиков доступно 720 р и 32fps, а для подписчиков Nitro — 4К и 60 fpx.
- Пригласите друзей. Для этого можно воспользоваться ссылкой-приглашением на канал.
- Установите права доступа. Перейдите в настройки сервера, а далее в раздел Роли, где легко открыть доступ к игре Дискорд другим пользователям. Эти параметры можно менять напрямую в настройках канала через вкладку Права доступа.


Для просмотра стрима жмите на значок возле ника друга. Наличие такого символа позволяет понять, что эфир уже запущен. При желании можно включить опцию Pop Out для открытия стрима в отдельном окне.
Оверлей
Если вы решили добавить игру в Дискорд, можно объединить оба чата (текстовый и голосовой) для максимальной эффективности. Для включения опции оверлей сделайте такие шаги:
- Жмите на шестеренку внизу (настройки).
- Выберите раздел Оверлей.


В дальнейшем можно общаться с другими пользователями в голосовом и текстовом формате. В процессе игры доступно изменение размера и перемещение окна чата, звонки друзьям, получение уведомлений о приходе текстовых сообщений и звонках.
Учтите, что некоторые антивирусные системы могут срабатывать на оверлей, поэтому необходимо добавить Дискорд в белый список защитного ПО. Если приложение вылетает или имеют место скачки пинга, отключите оверлей. Для этого:
- войдите в настройки пользователя;
- перейдите в раздел Игровая активность;
- отключите оверлей для проблемной игры.
После этого можно спокойно играть и не переживать о сбоях.
Как удалить отображенные игры
Бывают ситуации, когда пользователь хочет очистить список игровых приложений. В такой ситуации необходимо знать, как в Дискорде убрать отображение игры. Для этого сделайте следующие шаги:
- войдите в приложение и жмите на символ шестеренки слева внизу;
- перейдите в раздел Игровая активность;
- найдите пункт Отображать в статусе игру, в которую вы сейчас играете;
- переведите его в левую сторону.
В этом случае информация будет скрыта для других пользователей. В дальнейшем эту опцию легко включить (при необходимости).
Ошибки и их решение
При попытке добавить или установить игру могут возникнуть некоторые ошибки. Рассмотрим их причины и решение:
- 2022 — недостаточно места на жестком диске для обновления или установки. Удалите старые мемы или храните их на диске с большим объемом памяти.
- 2023 — закрыт доступ к диску из-за неправильного указания пути. Для решения выберите путь с разрешением на установку или измените его, чтобы можно было добавить Дискорд.
- 2058 — частые попытки обращения к API. Попробуйте закрыть и открыть программу, разблокируйте домен в настройках сети.
- 2064 — не удается обновить файл. Для решения перезапустите ПК и Дискорд, отключите на время антивирусное ПО. Проверьте, через Диспетчер задач, что игра не запущена.
- 2069 — проблемы с API Дискорд. Выждите пять минут и перезапустите игровое приложение.
- 2074 — трудности с удалением игры. Попробуйте убрать их вручную и перезапустите Дискорд.
- 2076 — обновление нескольких клиентов одновременно. Для решения проблемы желательно использовать одну версию программы.
Если ничего не помогает или не удается добавить приложение в Дискорд, всегда можно написать в службу поддержки по ссылке support.discordapp.com/hc/ru/requests/new?ticket_form_id=360000029212.

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

Мой блог про Форумные Ролевые Игры обвинили в рекламе. Я не виноват, что в рунете только один сайт и нет конкурентов. Но, чтобы не оставалось сомнений, что это не реклама, я пошагово расскажу как создать свою Форумную Ролевую Игру в Дискорде с Эль Президенте и котиками.
Но зачем нам делать свою игру в дискорде, если ты сам нахваливал готовый сайт? Хороший вопрос, мой воображаемый оппонент. И тут есть целый список плюсов.
1. Десктопное и мобильное приложения. У сайта (я даже его названия упоминать не буду, потому что не реклама) нет мобильной версии, а ведь так хочется с комфортом писать сообщения и не дёргать туда-сюда масштаб.
2. Пик-пилик. Дискорд пикнет и вспыхнет красным, если вам напишут, а ещё он обновляется и вы видите сообщения в реальном времени. Сайт же приходится обновлять и проверять лапками.
3. Возможность играть голосом, да хоть с вебками. Совсем как Стопгеймовцы.
4. Никакой модерации и ограничений. Никаких пяти полей в создании персонажа, никакого минимального ограничения по длине описания, можно даже гифки с видосиками кидать.

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

Уже тут начинается процесс оформления. Название и аватарка важны. Хотя бы чтобы не путаться в серверах.

Второе, организуем категории и каналы.
Если собираетесь играть голосом, то оставьте один голосовой и сделайте каналы «музыкальный бот» и «записи произошедшего». Поверьте, записи штука полезная, а музыкальный бот поможет создать настроение.
Если собираетесь играть текстом, то лучше сделайте отдельную категорию с игрой и отдельные комнаты для персонажей, что не находятся вместе. В этом плюс текстовых игр. Персонажи могут разойтись, но всё равно играть одновременно.
Остальные советы общие для всех. Создайте канал для кубиков. В комнатах с игрой они будут мешать, а в чате легко спутаются. Также сделайте две категории для персонажей игроков и для персонажей мастера. Так будет очень удобно искать информацию, туда же можно записывать инвентарь, состояние, опыт, здоровье и прочие переменные.

Пункт третий, зовите ботов. Можете зайти на top.gg и найти нужных вам там. Я же порекомендую лишь двоих. Dice Maiden и Groovy.
![Так работает Dice Maiden. !roll [количество кубиков]d[число граней] Буква F означает кубы для игры FATE и FUDGE на которых может выпадать только +, 0 или -](https://images.stopgame.ru/uploads/users/2021/506209/r847x474/rN4cCuif9GsZU4RA2HkRgw/00028.G_9ewd6.png,)

Конец
Поздравляю, FoxHeaven. Теперь ты можешь играть самостоятельно, без всяких сайтов и площадок. Никакой рекламы.
И всех остальных тоже поздравляю. Зовите друзей и веселитесь. Ну или наделайте закрытых комнат и устройте атмосферу загадочности и недоверия. Главное помните: роли видны всем, не надо давать игроку роль «мафия».
Как настроить Discord сервер для разработки видеоигры
Всем привет. Предположим вы решили сделать игру, но не один, а в команде. Однако ваши коллеги находятся слишком далеко от вас. Поэтому у вас появляется необходимость в создании рабочего чата. Многие решаются использовать Discord, но настроить его так, чтобы было всем удобно не получается. Это статья о том как правильно настроить дискорд сервер
Создание категорий
Итак, вы сделали дискорд сервер. О, чудо! И что дальше?
Для начала нам надо сделать несколько категорий. Самой первой категорий будет, та которая будет содержать себе всю необходимую стартовую информацию для присоединившихся к проекту. Предположим она будет называться «Информация». Вторая категория будет содержать все рабочие чаты. Назовем ее «Разработка проектов». Ну и третья категория будет иметь голосовые каналы (для собраний). Выглядит это как то так:
Категории настроили, теперь чаты.
Текстовые и голосовые каналы
В этой категории будут находиться данные о проекте и графике разработки, следовательно нам нужны там только ТЕКСТОВЫЕ каналы. Ниже приведу список каналов для данной категории.
- Приветствие
Этот канал может просто содержать в себе приветствие и. посылание в другие каналы категории «Информация». Например оно может выглядеть так:
Привет, друг! Если ты здесь значит ты попал в студию разработки видеоигр <название студии>! Переходи в другие каналы категории «Информация», чтобы узнать больше о сервере, его участниках и текущих проектах!
- Информация о текущих проектах
Как понятно из названия этот канал содержит в себе всю информацию о проекте над которым вы работаете. Пишите название проекта, размещаете его питч/концепт игры, в общем всю информацию об игре. Старайтесь почаще обновлять данные этого канала.
- Вопросы о проекте
Это канал, который позволяет участникам задавать вопросы о проекте, например «Вы делаете прототип?» или «Как работает та механика?»
- Информация об участниках
Данный канал нужен для того, чтобы новичок мог сразу ознакомиться с участниками проекта.
NB! Крайне НЕ рекомендуется использовать данные ваших коллег по проекту без их согласия.
Пример информации об участнике:
<ник участника> — <имя участника>. <что делает>. <индивидуальная информация>
- Правила сервера
Как понятно из названия, этот текстовый канал будет содержать правила поведения на сервере.
- Канал системных сообщений
Данный канал необязателен, но если вы не хотите, чтобы в вашем рабоче чате сыпались системные уведомления сделайте данный канал
Чтобы системные уведомления сыпались именно сюда, откройте настройки сервера, далее жмите на вкладку «Обзор» и затем ищите надпись «Канал системных сообщений». Под ней будет специальная настройка.
2) Разработка проектов
- Рабочий чат и его подвиды
Под словом «подвиды» я подразумеваю каналы где будут обсуждаться какие — то аспекты проектов — то есть у программистов будет канал «Код», у дизайнеров «Дизайн» и т.д и т.п. Зачем это нужно? Разделение рабочего чата на множество подвидов помогает вам лучше ориентироваться в работе ваших коллег — результаты заданий и вопросы дизайнера и программиста не будут перемешиваться.
Также вам необходимо создать рабочий чат — он просто нужен, не могу ответить конкретно зачем (знаю тупо, но обычный рабочий чат вам понадобится)
Здесь надо добавить не текстовые каналы, а ГОЛОСОВЫЕ каналы. Добавьте пару штук, в зависимости от того, когда и насколько часто вы их проводите.
Ограничения в каналах
Итак вы добавили все голосовые и текстовые каналы. Однако это еще не конец. Вам нужно настроить ограничения в каналах, дабы случайно (или специально) ваш коллега не написал туда куда не надо.
Лично я рекомендую ставить ограничения на написание сообщения в некоторых чатах в категории «Информация», так как моделируете там только вы. Поставьте запрет на сообщения на все каналы в данной категории за исключением канала «Вопросы о проекте».
Дополнительные плюшки
Если хотите можете добавить роли участникам в зависимости от их рода деятельности. Так легче смотреть кто чем занимается.
Также можете добавить чаты для общения, но скорее всего их никто не будет использовать.
Не совсем конец
Итак, здесь был наглядно показан шаблон сервера, который вы можете использовать для себя. Надеюсь он будет достаточно удобен для вас. Предупреждаю, вы должны сделать каналы в соответствии с тем как вы будете работать. Названия вы, конечно, менять можете.
У нас появился Telegram канал где мы будем публиковать новости о ходе разработки нашей игры — @terra_vanStudio вот его название. Если вы его не найдете — пишите в комментарии, я постараюсь помочь. Также в скором времени к нас появится на нашем YouTube канале первый ролик — я выпущу отдельную статью с ссылкой на канал, ну а пока держите название канала — Terra_Van Studio.
Надеемся эта статья была полезной для вас. Пишите свое мнение в комментариях, оценивайте (критика безусловно важна!) ну и. успехов и пока!
Пишем Discord бота крестики-нолики

Вы когда-нибудь хотели создать свой бот для игры в крестики-нолики в Discord? Так ещё при помощи blazingly fastRust и крейта serenity ! Всех заинтересовавшихся прошу под кат.
Небольшое предисловие
Пытаясь создать Discord сервер и бота к нему для моего новоиспечённого университета, я обнаружил много интересных нововведений в Discord API для разработчиков ботов, с которыми я решил поделиться с вами в своей первой статье на Хабре. В ней я расскажу об основных нюансах написания Discord бота с использованием новых фишек, на языке программирования Rust, используя крейт serenity.
Что потребуется?
Минимальное знание базы языка Rust (Rust Book) и ассинхроного программирования в нём.
Сервер в Discord’е как минимум с одним текстовым каналом.
Приготовительные работы
Начнём по порядку. Для работы нашего бота ему необходимо создать аккаунт на сайте для разработчиков Discord. Переходим по ссылке, авторизируемся в своём Discord аккаунте и переходим во вкладку Applications . Там нажимаем на кнопку New Application :

Вводим название нашего бота и нажимаем Create :

Перед нами высвечивается окно общих настроек нашего приложения. В нём я установил иконку для нашего бота. Чтобы использовать все функции нашего приложения, надо создать пользователя-бота во вкладке слева:

Создаём бота кнопкой Add Bot и нажимаем на Reset Token :

Копируем появившийся токен, и стараемся чтобы он не попал в чужие руки, так как через него будет работать наш бот.
Последним штрихом в нашей настройке бота будет раздел Privileged Gateway Intents . Intents позволяют нам включать/выключать некоторые возможности бота такие, как Presence Intent (необходим для приложений), Server Member Intent (позволяет работать с членами гильдий(серверов)) и необходимый нам прямо сейчас Message Content Intent , который позволит нам читать текст сообщений:

Создание и настройка бота завершена. Теперь нам необходимо добавить нашего бота на наш сервер. Переходим во вкладку OAuth2/URL Generator :

Выбираем bot в Scopes , так как нам остальные не нужны. А в Bot permissions выбираем права доступа Administrator . Они позволят нам творить всё, что мы пожелаем, но если вы собираетесь делать настоящий бот, рекомендуется выбирать только необходимые для вашего бота разрешения.
После настройки бота, переходим по сгенерированному адресу, и добавляем бота на наш тестовый сервер:

Первая проба
Начнём по порядку. Во-первых нам необходимо добавить крейт serenity в наш Cargo.TOML файл:
Примечение:
Мы используем библиотеку serenity с ветки next и с определенного коммита ( ba3be69166f54c5986e4cc9438bc5bb4606fa4c2 ).
В main.rs напишем тестовый вариант нашего бота, чтобы проверить, работает ли всё, как надо:
Не забудьте добавить файл с токеном ( token.txt ) в директорию проекта
Если мы всё сделали правильно, то при вводе команды !ping бот будет нам отвечать «pong!»:

Вы скажете: «Хорошо, это мы уже видели двести раз в бесконечных туториалах, можешь ли ты показать хоть что-то интересное?» И я отвечу — да. Да начнётся с этого момента самое интересное!
Рассматриваем новые возможности
В последних версиях Discord появились взаимодействия ( Interactions ), представленные в следующей табличке:
Необходимо для взаимодействия с webhook-based interactions
— Ввод с чата (слэш-команды)
— Контекстное меню сообщения
— Контекстное меню пользователя
Обработка нажатия кнопок, выбора элемента из выпадающего списка
Обработка ввода текста из всплывающих модальных окон
Давайте рассмотрим некоторые из них, необходимые для нашего бота, более подробней. Например, Slash commands выглядят следующим образом:

Они позволяют более удобно пользоваться Discord ботами: они дают возможность добавлять кастомные параметры, которые будут подсвечивать необходимые варианты, настраивать уровни доступа к команде в настройках сервера (Server Settings > Apps > Integrations). При помощи них мы сделаем команду по вызову игры: /play .
Также одним из важных нововведений для разработчиков ботов было создание временных сообщений ( ephemeral ), которые видны только человеку, который отправил слэш-команду. Это позволило создать большое количество интересных ботов, которые теперь также можно подключить при помощи двух кликов (Server Settings > Apps > App Directory). Конкретно в нашей ситуации, нам это пригодится в качестве инструмента для ввода нашего хода.
Последний необходимый нам функционал заложен в Message Components . При помощи него, мы можем добавлять добавлять кнопки, выпадающий список и модальное окно ввода текста. Кнопку и раскрывающийся список необходимо добавлять в `ActionRow` сообщения, где количество кнопок может быть максимум пять, а список только один. А самих ActionRow можно добавить тоже только пять к сообщению. Отсюда нам пригодится информация только про ActionRow и кнопки, которые будут позволять нам двигаться по игровому полю (3×3), а также отправлять наш ход противнику.

Interaction Callback Type
Подтвердить PING взаимодействие
Ответить на взаимодействие сообщением
Подтвердить взаимодействие, и изменить interaction response позже. Пользователь будет видеть состояние загрузки
[Для компонентов] Подтвердить взаимодействие и изменить оригинальное сообщение позже. Пользователь не будет видеть состояние загрузки
[Для компонентов] Изменить сообщение, компонент который был приложен к нему
Ответить на взаимодействие автодополнения с предложенными вариантами
Ответить на взаимодействие при помощи всплывающего модального окна
Здесь я заменил центральный столбец значений Discord API на столбец значений enum CreateInteractionResponse из serenity, чтобы было более наглядно видно, что я предлагаю использовать в нашем боте. В нём будут использоваться только CHANNEL_MESSAGE_WITH_SOURCE ( Message ) и DEFERRED_UPDATE_MESSAGE ( Acknowledge ). Первое мы будем использовать всегда, когда надо будет прислать новое сообщение, а последнее только в одном случае, когда мы будем обрабатывать ход игрока, редактируя уже хранящиеся в памяти значения CommandInteraction .
Примечание:
Эти и другие возможности Discord API можно посмотреть на сайте https://discord.com/developers/docs/intro. Рекомендую!
Начинаем писать код
Первое, с чего следовало бы начать, это переделать нашу команду !ping на современные слэш-команды. Для этого добавим файл ping.rs с двумя фунциями, которые позволят нам создать нашу первую слэш-команду!:
Функция register позволяет нам присвоить имя нашей слэш-команде и сделать к ней описание (а также указать необходимые параметры для ввода), а в функции application_command мы проводим обработку вызова команды, выдавая в качестве ответа сообщение, которое будет видно только отправителю.
Осталось связать наш модуль ping с нашей предыдущей программой. Для этого нам необходимо добавить interaction_create метод в EventHandler трейт, который находится в main.rs файле:
Также не забываем зарегистрировать нашу команду в методе ready . Достаточно один раз зарегистрировать команду, и она там будет находится даже после перезапуска бота, но для простоты, мы её будем всегда её регистрировать, когда стартуем бота.
Примечание:
Если вы хотите удалить слэш-команду, используйте функцию GuildId::delete_application_command .
В результате мы получаем следующее:

А также слэш-команда появилась в серверных настройках нашего бота (Server Settings > Apps > Integrations):

Примечание:
Чтобы можно было видеть ID объектов (например, тех же слэш-команд), при нажатии правой кнопки по ним, необходимо включить режим разработчика в User Settings > App Settings > Advanced > Developer Mode.
Реализация идеи крестиков-ноликов
Имея на руках опыт работы со слэш-командами, мы можем предположить, что можно создать команду /play , выводящую ephemeral сообщение для каждого человека, который её введет. Следовательно, каждый игрок, вводя эту команду, будет получать сообщение, сообщающее, что нужно дождаться второго игрока, или сразу будет начинать игровую сессию. Каждую игровую сессию мы будем хранить в Vec<Arc<Mutex<GameSession>> , где, для простоты примера, все элементы GameSession будут обернуты одним Mutex ‘ом. Для реализации движения на карте будет использоваться кнопки, а также не будем забывать про то, что их можно делать ненажимаемыми, следовательно можно будет уменьшить количество условий для проверки хода.
Также, чтобы сделать нашу игру более красочной, мы добавим крейты image и imageproc , которые позволят нам рендерить игровое поле:
Главная структура, которая будет хранить загруженные в память изображения крестика, нолика и полосок, которые будут перечеркивать победную троицу. Также мы сразу отрисуем игровое поле и запишем в new_game_canvas , которое мы будем потом переиспользовать каждый раз, когда будет начинаться новая игра. После каждого вызова слэш-команды /play мы будем проверять, хочет ли ещё кто-то поиграть в wait_user , если да, мы запустим новую сессию и добавим её в sessions , иначе положим нашего игрока подождать в поле wait_user :
Как можно было заметить, wait_user хранит не только id пользователя, но также CommandInteraction , которое мы будем изменять для изображения холста игры и кнопок. Третья String хранит имя пользователя (либо имя члена сервера, а если его нет — оригинальное имя). В то же время, можно было использовать следующее форматирование: <@USER_ID> — и хранить только UserId , но оно не работает в заголовках embed сообщений, так что мы будем запоминать имя нашего игрока при старте его игровой сессии. Последний элемент кортежа ( Message ) хранит сообщение, которое будет общедоступно всем, и будет показывать ход игры между двумя игроками.
Следующий код описывает структуру игровой сессии:
Из интересного, здесь имеется stage переменная, которая будет обозначать, кто сейчас ходит, а также cursor_pos переменная, хранящая позицию виртуального «курсора» игрока, который ходит в данный момент.
Простая инициализация, с подгрузкой следующих изображений из директории ресурсов:

В функции draw_new_game_canvas() происходит отрисовка нашего игрового поля:
Конечно, не забудем инициализировать наши слэш-команды. Также я решил добавить команду-заглушку /stop :
Теперь нам предстоит написать один из самых важных методов для нашей программы: command() , который будет обрабатывать ввод слэш-команды /play и запускать игровую сессию:
Начнём с отсеивания ненужных нам вариантов. В начале сразу отсеим команду /stop , выводя текст «Unimplemented!»:
Также проверим, есть ли наш игрок уже в какой-либо игре:
Последовательно ищем такой же UserId в self.wait_user , а потом во всех уже идущих игровых сессиях. После того, как мы отсеяли ненужные нам варианты, мы проверяем, ждет ли кто-то ещё старта игры в self.wait_user , иначе мы записываем нашего текущего игрока в эту переменную:
После того, как мы дождались двух игроков, мы добавляем их в общий массив всех игровых сессий:
И под конец вызываем метод self.process_session() , который будет отображать первый кадр нашей игры:
Ниже я сразу покажу три похожие функции, которые обновляют окно у игрока в зависимости от того, ждёт ли он хода или уже ходит:
Можно было заметить, что функция update_game_message() использует ComponentInteraction , а не CommandInteraction . Это связано с тем, что нажатия кнопок, выбор элемента из раскрывающего списка и ввод текста вызывают Message Component interaction , а не Application Command interaction , как при вызове слэш-команд. В дальнейшем мы напишем функцию, которая будет обрабатывать нажатия кнопок.
Третья функция update_game_message() используется только когда игрок, который ходит, двигается по карте:

Для отрисовки красного квадрата выбора клетки, воспользуемся следующей функцией:
Где массив CELLS — захардкоженные значения позиций ячеек:
Функции ( generate_disabled_action_row() и generate_game_action_row() ) особого интереса не представляют, кроме того, что я решил не убирать кнопки игроку, ожидающему своей очереди, а просто их отключать:
Осталась одна нераскрытая функция, которая позволит создать вложение ( CreateAttachment ) для нашего сообщения:
Осталось уже совсем немного. Обработаем Message Component interaction :
Не забываем указать некоторые вспомогательные методы:
Мы были обязаны указать у каждой кнопки свой custom id , который нам пригодился здесь, для того, чтобы понять какая кнопка была нажата. Тут же мы проверяем, не закончилась ли наша игра победой одного из игрока, либо ничьей. В конце удаляем у каждого игрока ephemeral сообщения, оставляя только то, которое было доступно всем, в котором пишем результат прошедшей игры:
В методе generate_end_attachment() рендеринг происходит следующим интересным образом: мы берём полупрозрачное изображении нашей полоски (которая перечеркивает победную троицу) и накладываем на последнюю версию холста при помощи функции fill_pixel() :
Нам этом точно всё. То есть всё с модулем game.rs , мы с ним покончили. Осталось только подправить main.rs и запустить нашего бота!:
Запускаем бота и наблюдаем следующий результат:
Можно заметить, что взаимодействия в Discord имеют довольно большой таймаут. Предполагаю, что ещё вносит свою лепту то, что мы меняем изображение, это тоже делает задержку. Так что для каких-то очень динамичных игр это не подойдет. Конечно, сейчас уже доступны (по подписке Nitro) активности в голосовых каналах, правда которые могут разрабатывать только команда Discord. Также я не уверен, что мы в скором времени увидим их общедоступными для всех пользователей и разработчиков, хотя я бы посмотрел на это. Но главную цель этого туториала — познакомиться с уже доступными возможностями для разработки своего собственного бота — мы выполнили.
Спасибо, что прочитали эту статью. Могу от себя сказать, что я наконец-то понял, насколько тяжело писать статьи. Надеюсь, и эта кому-то поможет или даст вдохновение. Пишите в комментариях ваши замечения и отправляйте при помощи CTRL + Enter найденные вами очепятки!
UPD:
@TheDanikReal в комментариях подметил, что можно было создать ряд из кнопок (3×3), т.к. можно создать несколько экземпляров(до 5) ActionRow и добавить их к сообщению. Изначально я не сделал так, так как знал только то, что можно к ActionRow до 5 кнопок. Если реализовать идею @TheDanikReal из комментариев (сделать 9 кнопок, по одной кнопке на одну ячейку поля) то можно получить более динамичный и интересный геймплей из-за уменьшения задержек во время игры.