Создание кланов в дискорд
На каждом шаге будем постепенно наращивать функционал.
Создадим новый web api проект с одним контроллером /check. При обращении к этому адресу будем отправлять строку “Hello!” в Discord чат.
Научимся получать данные о составе гильдии с помощью готовой библиотеки или заглушки.
Научимся сохранять в кэш полученный список игроков чтобы при следующих проверках находить различия с предыдущей версией списка. Обо всех изменениях будем писать в Discord.
Напишем Dockerfile для нашего проекта и разместим проект на хостинге Heroku.
Посмотрим на несколько способов сделать периодическое выполнение кода.
Реализуем автоматическую сборку, запуск тестов и публикацию проекта после каждого коммита в master
Создание нового проекта - это одна из фундаментальных вещей которые я не буду подробно расписывать. При работе над проектом используйте сервис Github для хранения кода. В дальнейшем мы воспользуемся несколькими возможностями Github.
Добавим к проекту новый контроллер
Получить его можно в пункте integrations в настройках любого текстового канала вашего Discord сервера.
Создание webhook
Добавим webhook в appsettings.json нашего проекта. Позже мы унесем его в переменные окружения Heroku. Если вы не знакомы с тем как работать с конфигурацией в ASP Core проектах предварительно изучите эту тему.
Кроме того, я извлек интерфейс этого класса, чтобы в дальнейшем можно было сделать его заглушку при тестировании. Делайте это для всех сервисов которые мы будем создавать далее.
Не забудьте что новый класс нужно будет зарегистрировать в Startup.
Теперь можно воспользоваться новым классом в контроллере.
Получаем реальные данные
Подключим к проекту библиотеку ArgentPonyWarcraftClient.
Создадим новый класс BattleNetApiClient в папке Services.
В конструкторе мы создаем новый экземпляр класса WarcraftClient.
Этот класс относится к библиотеке, которую мы установили ранее. С его помощью можно получать данные об игроках.
Кроме этого, нужно создать в appsettings проекта две новых записи RealmName и GuildName. RealmName это название игрового мира, а GuildName это название гильдии. Их будем использовать как параметры при запросе.
Сделаем метод GetGuildMembers чтобы получать состав гильдии и создадим модель WowCharacterToken которая будет представлять собой информацию об игроке.
Класс WowCharacterToken следует поместить в папку Models.
Не забудьте подключить BattleNetApiClient в Startup.
Берем данные из заглушки
Для начала создадим модель WowCharacterToken и поместим ее в папку Models. Она представляет собой информацию об игроке.
Дальше сделаем вот такой класс
Он возвращает зашитый в него список игроков. При первом вызове метода мы вернем один список, при последующих другой. Это нужно нам что смоделировать изменчивое поведение api. Этой заглушки хватит чтобы продолжить делать проект.
Сделайте интерфейс и подключите все что мы создали в Startup.
Выведем результаты в Discord
После того как мы сделали BattleNetApiClient, им можно воспользоваться в контроллере чтобы вывести кол-во игроков в Discord.
Шаг 3. Находим новых и ушедших игроков
Нужно научиться определять какие игроки появились или пропали из списка при последующих запросах к api. Для этого мы можем закэшировать список в InMemory кэше (в оперативной памяти) или во внешнем хранилище.
Если закэшировать список в InMemory кэше, то мы потеряем его при перезапуске приложения. Поэтому позже мы подключим базу данных Redis как аддон в Heroku и будем кешировать туда.
А пока что подключим InMemory кэш в Startup.
Теперь в нашем распоряжении есть IDistributedCache, который можно подключить через конструктор. Я предпочел не использовать его напрямую , а написать для него обертку. Создайте класс GuildRepository и поместите его в новую папку Repositories.
GuildRepository нужно зарегистрировать как Singletone зависимость, чтобы кэш не пересоздавался на каждый запрос.
Теперь можно написать сервис который будет сравнивать новый список игроков с сохраненным.
В качестве возвращаемого результата используется модель Report. Ее нужно создать и поместить в папку Models.
Применим GuildService в контроллере.
Теперь отправим в Discord какие игроки присоединились или покинули гильдию.
Можно вывести больше информации об игроке. Ее можно получить если воспользоваться библиотекой ArgentPonyWarcraftClient
Я решил не добавлять в статью больше кода в BattleNetApiClient, чтобы статья не разрослась до безумных размеров.
Unit тесты
У нас появился класс GuildService с нетривиальной логикой, который будет изменяться и расширяться в будущем. Стоит написать на него тесты. Для этого нужно будет сделать заглушки для BattleNetApiClient, GuildRepository и DiscordBroker. Я специально просил создавать интерфейсы для этих классов чтобы можно было сделать их фейки.
Создайте новый проект для Unit тестов. Заведите в нем папку Fakes и сделайте три фейка.
Эти фейки позволяют заранее задать возвращаемое значение для методов. Для этих же целей можно использовать популярную библиотеку Moq. Но для нашего простого примера достаточно самодельных фейков.
Первый тест на GuildService будет выглядеть так:
Как видно из названия, тест позволяет проверить что мы сохраним список игроков, если кэш пуст. Заметьте, в конце теста используется специальный набор методов Should, Be. Это методы из библиотеки FluentAssertions, которые помогают нам сделать Assertion более читабельным.
Теперь у нас есть база для написания тестов. Я показал вам основную идею, дальнейшее написание тестов оставляю вам.
Главный функционал проекта готов. Теперь можно подумать о его публикации.
Шаг 4. Привет Docker и Heroku!
Чтобы упаковать проект в Docker нам понадобится создать в корне репозитория Dockerfile со следующим содержимым
peon.dll это название моего Solution. Peon переводится как батрак.
О том как работать с Docker и Heroku можно прочитать здесь. Но я все же опишу последовательность действий.
Вам понадобится создать аккаунт в Heroku, установить Heroku CLI.
Создайте новый проект в heroku и свяжите его с вашим репозиторием.
Теперь нам необходимо создать файл heroku.yml в папке с проектом. У него будет такое содержимое:
Дальше выполним небольшую череду команд:
Можете открыть приложение в браузере с помощью команды:
После того как мы разместили приложение в Heroku, нужно подключить базу данных Redis для кэша. Как вы помните InMemory кэш будет исчезать после перезапуска приложения.
Установите для нашего Heroku приложения бесплатный аддон RedisCloud.
Строку подключения для Redis можно будет получить через переменную окружения REDISCLOUD_URL. Она будет доступна, когда приложение будет запущено в экосистеме Heroku.
Нам нужно получить эту переменную в коде приложения.
С помощью нее можно зарегистрировать Redis реализацию для IDistributedCache в Startup.
В этом коде мы получили переменную REDISCLOUD_URL из переменных окружения системы. После этого мы извлекли адрес и пароль базы данных с помощью класса RedisUtils. Его написал я сам:
На этот класс можно сделать простой Unit тест.
После того что мы сделали, GuildRepository будет сохранять кэш не в оперативную память, а в Redis. Нам даже не нужно ничего менять в коде приложения.
Опубликуйте новую версию приложения.
Шаг 5. Реализуем циклическое выполнение
Нам нужно сделать так чтобы проверка состава гильдии происходила регулярно, например каждые 15 минут.
Есть несколько способов это реализовать:
Третий способ - это подключить к проекту специальные Cron аддоны. Например Heroku Scheduler. Можете пойти этим путем и разобраться как создать cron job в Heroku.
Шаг 6. Автоматическая сборка, прогон тестов и публикация
Во-первых, зайдите в настройки приложения в Heroku.
Там есть пункт Deploy. Подключите там свой Github аккаунт и включите Automatic deploys после каждого коммита в master.
Поставьте галочку у пункта Wait for CI to pass before deploy. Нам нужно чтобы Heroku дожидался сборки и прогонки тестов. Если тесты покраснеют, то публикация не случится.
Сделаем сборку и прогонку тестов в Github Actions.
В репозитории появится новый файл dotnet.yml. Он описывает процесс сборки.
Как видите по его содержимому, задание build будет запускаться после пуша в ветку master.
Содержимое самого задания нас полностью устраивает. Если вы вчитаетесь в то что там происходит, то увидите что там происходит запуск команд dotnet build и dotnet test.
Менять в этом файле ничего не нужно, все уже будет работать из коробки.
Запушьте что-нибудь в master и посмотрите что задание запускается. Кстати, оно уже должно было запуститься после создания нового workflow.
Надеюсь данная статья подкинула вам пару новых идей и тем для изучения. Спасибо за внимание. Удачи вам в ваших проектах!
На какую тему создать сервер: лучшие идеи
Идеи для каналов в Дискорде нужно выбирать, отталкиваясь от собственных интересов и востребованностью.
Важно! Основная часть аудитории в Дискорд – это геймеры и поклонники компьютерных игр, поэтому сервер лучше создать для общения и обмена информацией на игровые тематики.
Например, хорошей идеей будет создание сервиса для интересных видеоигр:
- Portal 2
- Red Dead Redemption
- King’s Bounty: Легенда о рыцаре
- Max Payne
- Heavy Rain и другие.
Если тематика видео игр не близка, можно создать сервер для фанатов нашумевшего сериала или книги. В сообществе можно делиться своими впечатлениями от кинокартины, печатного издания и найти друзей по интересам. Сервера создаются и для учащихся школ и университетов( группы и классы).
Интересные идеи оформления нового сервера
Чтобы привлечь внимание пользователей Дискорда необходимо поработать над оформлением сервера. Крутые тематические шаблоны можно скачать на специальных сервисах или нарисовать в программе самостоятельно. Это можно сделать в приложение Illustrator или Photoshop. Аватарка должна отображать идею создания сервера. Например, если канал создается для общения с родственниками можно нарисовать каждого члена семьи в виде мультипликационного персонажа персонажа, передав все характерные черты. Если сервер создается для общения геймеров или поклонников сериала, то обложка должна быть сразу узнаваемой и отражать тематику сообщества.
Название, аватарка и иконки
Название
Еще капитан Врунгель сказал « Как корабль назовешь, так он и поплывет», поэтому особенно важно выбрать название. Если группа по интересам здесь не нужно особенно креативить. Название должно в первую очередь суть самого сообщества. Например, « Сервер для фанатов игры Red Dead Redemption». Чтобы создать названия сервера воспользуйтесь инструкцией:
- Скачайте Дискорд.
- Выберете действия « Создать свой сервер».
- В поле название вашей группе укажите названия сообщества.
- Нажмите клавишу « Создайте сервер».
Иконки
Чтобы добавить детали для яркости используйте иконки. Для этого выполните следующие шаги:
Можно найти и другие сайта для копирования иконок. Здесь все зависит от желания создателя сервиса.
Аватар
Чтобы поставить аватар в профиль необходимо выполнить инструкцию:
- Зайти в Дискорд.
- Нажать на иконку в виде шестеренки возле своего ника.
- Отрыть раздел « Моя учетная запись».
- Редактировать профиль.
- Найдите в интернете подходящую картинку или нарисуйте ее в специальной программе.
- Кликните в Дискорде на значок аватарки.
- Выберете рисунок с ПК или мобильного телефона.
- Измените изображение.
После выполнения этих действий аватар изменится. Выбирать можно любую картинку все зависит от полета вашей фантазии.
Роли в Дискорде – это возможности пользователя обладать расширенными полномочиями. При создании группы у всех участников будут минимальные права. Раздавать роли может администратор сообщества.
Чтобы создать роли, необходимо выполнить эти действия:
- Перейдите в Дискорд, создайте сервер и добавьте участников.
- Нажмите на сервер, и выберете действие « Настройка сервера».
- Из списка выберете « Роли» и нажмите на плюсик.
- Введите название роли и привяжите к ней определенный цвет.
- Сохраните изменения.
После этих действий будет доступно распределение ролей.
Эмодзи
Эмозди – это картинки в сжатом формате, которые передают настроение участника. Они помогают оживить переписку и лучше понимать собеседника. В Дисорде есть несколько способом обмениваться эмозди в текстовой переписке.
Этот набор эмодзи не нужно дополнительно скачивать и копировать, все смайлики уже присутствуют в приложении. Их можно найти по инструкции:
Сторонние эмодзи
Если стандартных эмодзии недостаточно, их можно скачать на сторонних ресурсах, главное, чтобы они обладали этими характеристиками:
Бот – это специальная программа, которая выполняет действия по заданному алгоритму. Он будет наводить порядок на сервере, и обращаться с людьми. В дискорд можно добавить этих ботов:
Бог выполнит за вас всю монотонную работу. Он будет:
- Отправлять приветственную рассылку всем пользователям и вести с ними активную переписку по заданному алгоритму.
- Присваивать роли пользователям и удалять их.
- Оповещать пользователей о событиях на Ютубе и Твиче.
- Накладывать штрафные санкции, если пользователь не соблюдает правила сообщества.
Для работы боты установите его в дискорд и задайте алгоритм действий, введя специальные команды.
Настройка каналов
В первую очередь при настройке каналов нужно обратить внимание на раздел « Категории», именно он поможет разложить все по полочкам и навести порядок в сообществе. Инструкция для создания категорий:
- Зайдите в Дискорд и нажмите на пустое пространство, появится контексное меню. В нем необходимо выбрать « Создать категорию».
- Введите название и нажмите « Создать».
- Для редактирования категории нажмите по ней левой кнопкой мыши
- В меню можно отключить звук канала, свернуть категорию, редактировать ее и удалить.
Выберете соответствующее действие и закройте этот пункт. Далее нужно перейти к разделу « Параметры». Чтобы изменить настройки необходимо навести на название правой кнопкой мыши, и выбрать « Настройки». В разделе можно выбрать:
- Обзор. Здесь можно изменить название сервера и добавить к нему описание.
- Права доступа. В этом разделе можно распределить список ролей и решить, кому из участников доверить права.
- Приглашение. В разделе создается ссылка, по которой можно приглашать на сервер других участников.
- Вебхуки. В раздел добавляются скрипты для обратной связи с игроками.
Настроить сервер совсем не сложно, нужно лишь не много терпения и времени, тогда результат не заставит себя ждать.
Current settings: .settings
Let's create a small basic guild: .create
Note: if it's not your first clan you'll most likely not become its member automatically
This command is for joining clans: .join
Opposite action: .leave-guild
Now let's make an advanced guild.
All you need is .edit-guild . There's a couple of moments I want to mention. If your guild's name is longer than 1 word, it should be [in square brackets]. BUT! Usually you don't have to type the full name. Bot can also recognize partial names.
- In case you want to rename your creation: .edit-guild name
- Add a cool description: .edit-guild desc
- You can change clan's avatar by using .edit-guild avatar
- There's such thing as private mode: .edit-guild privacy If enabled, you'll get join requests.
- You can also set local member limit: .edit-guild limit
- Sometimes leaders link a role to their guilds: .edit-guild role
- Another nice option to improve your guild is to add a helper: .edit-guild helper
- Finally, you can transfer ownership: .edit-guild leader
Let's imagine we have a clan named "Rich Kings" and I made it private by typing .eg privacy [Rich Kings] on
Now if someone wants to join my clan, guild helper and I will recieve a join request.
- View all requests: .requests
- Accept a request: .accept
- Decline a request: .decline
Helpers are also able to kick members: .kick
If you're an administrator or a guild master, you're able to change reputation.
Command: .rep
But you can always earn free reputation by upvoting the bot: .i-voted
- Видео-туториал
Сменить язык на русский: .lang ru
Список команд: .help
Текущие настройки бота можно увидеть в .settings
Допустим у меня есть клан, и назвается он Крепость
Включу ему приватность: .eg privacy Крепость on
Теперь, если кто-то захочет вступить в мой клан, то мне и моему помощнику придёт запрос на вступление, который кто-то из нас может принять или отклонить.
- Посмотреть список запросов: .requests
- Принять запрос: .accept
- Отклонить запрос: .decline
Помимо отбора участников, помощник уполномочен кикать пользователей, команда: .kick
Если Вы являетесь создателем, админом или обладателем мастер-роли на своём сервере, то это значит, что Вы имеете право начислять / снимать репутацию
Команда для начисления репутации: .rep
А если не являетесь? Что ж, всегда можно забрать халявную репутацию, проголосовав за бота и прописав .i-voted
Поговорим о том, как создать группу в Дискорде и настроить ее? Информация будет интересна тем, кто начинает пользоваться мессенджером и не знает о некоторых доступных фишках программы!
Инструкция для пользователя
Сразу отметим – внутри мессенджера есть сервера, каждый из которых включает в себя каналы . Именно их стоит иметь ввиду, читая данный обзор.
А теперь попробуем разобраться, как создать беседу в Дискорде! Это очень удобный инструмент, позволяющий объединить нескольких участников для тематического общения. Сделать канал сможет каждый – сначала убедитесь, что вы уже создали необходимый сервер.
- Найдите с левой стороны панель с серверами;
- Выберите нужный;
- Под названием сервера слева вы увидите доступные способы сгруппировать людей в Discord (текстовые или голосовые);
- Чтобы создать новое сообщество, нажмите плюсик напротив;
- Или нажмите на стрелку вниз рядом с названием сервера, чтобы открыть дополнительное меню, где есть пункт «Создать группу для клана в Дискорде»;
- Выберите тип – текстовый или голосовой, поставив галочку в определенной строке;
- Задайте название в соответствующем поле;
- Нажмите на кнопку «Создать» .
Вы можете сделать закрытую группу в Дискорде! В чем особенность приватного канала? Читать и подключаться смогут только определенные роли.
Если вы хотите сделать приватное сообщество, необходимо:
- Включить тумблер в строке «Приватный» ;
- Откроется список доступных ролей – выберите, кто получит доступ;
- Включите тумблеры напротив нужных ролей;
- Нажмите на иконку создания для сохранения изменений.
Обращаем внимание: конфиденциальным может быть только текстовый канал не голосовой. Поздравляем! С задачей справились.
Настройки группы
Следуем дальше – разберемся, как настроить группу в Дискорде. Сначала пополним перечень участников:
- Чтобы добавить пользователя, кликните по иконке человечка в строке с названием;
- Выберите человека из списка контактов или скопируйте автоматически сформированную ссылку-приглашение.
Чтобы настроить чат:
- Вы можете менять имя и тематику, устанавливать права доступа и управлять приглашениями;
- Здесь есть кнопка удаления группы.
Если захотите избавиться от пользователя, найдите его справа и щелкните правой кнопкой мыши. В появившемся меню вы увидите нужный пункт.
Необходимо сказать несколько слов о том, как сделать группу в Дискорде с телефона и управлять ею. Алгоритм действий не имеет отличий – просто адаптируйте его под маленький экран смартфона. И не забудьте скачать приложение!
Читайте также: