Discord Sync Синхронизация форума Discourse с сервером Discord
Этот плагин позволяет синхронизировать определённые данные, связанные с пользователями, между экземпляром форума Discourse и сервером Discord. Он создаёт Discord-бота для обработки всех разрешений и реагирования на определённые действия на сервере.
Возможности
Синхронизация групп Discourse с ролями Discord
Плагин автоматически управляет ролями на сервере Discord на основе групп, к которым имеет доступ пользователь в Discourse.
Роль «Подтверждённый»
Вы можете добавить роль «Подтверждённый», которая будет присваиваться всем пользователям Discord, связавшим свои учётные записи Discord.
Безопасные роли
Поскольку этот плагин принудительно синхронизирует роли в Discord с группами в Discourse, вы можете указать список ролей, которые бот будет игнорировать, и которые вы сможете управлять вручную на сервере Discord.
Синхронизация имени пользователя Discourse с никнеймом Discord
Если вы хотите распознавать пользователей по их имени на форуме, вы можете принудительно установить им никнейм на сервере Discord, совпадающий с их именем пользователя в Discourse.
Триггеры
Плагин выполнит полную синхронизацию Discourse → Discord (никнеймы и роли) в следующих случаях:
Discourse
Пользователь добавляется в группу
Пользователь удаляется из группы
Профиль пользователя обновляется Предназначено для синхронизации имени пользователя и никнейма
Пользователь проходит аутентификацию Выполняется только если провайдер аутентификации — Discord, чтобы гарантировать первоначальную синхронизацию сразу после связывания учётных записей
Discord
Пользователь присоединяется к серверу Discord Плагин выполнит поиск в базе данных пользователя с указанным ID Discord и запустит задачу синхронизации
Установка
Этот плагин зависит от Discord OAuth2 для идентификации и связывания учётных записей Discourse и Discord. Если вы не хотите разрешать пользователям вход через Discord, но желаете сохранить возможность связывания учётных записей, ознакомьтесь с решением этой темы.
Требования
Этот плагин требует наличия libsodium (требуется для Ruby-гема Discord). Для установки измените файл .yml и добавьте следующий код:
Следуйте стандартному руководству по установке плагина, используя URL репозитория: https://github.com/barreeeiroo/discourse-discord-sync.git
Следуйте этому руководству для настройки входа через Discord в вашем экземпляре Discourse.
В портале разработчика Discord перейдите в раздел «Бот» и добавьте его на свой сервер. Убедитесь, что вы предоставили ему максимально возможную роль.
В Discourse в настройках плагина установите значение discord sync token на токен бота, полученный на предыдущем шаге.
Параметры конфигурации
discord sync enabled: Включить или отключить интеграцию
discord sync token: Токен бота из Discord
discord sync prefix: Префикс для команд (пока только !ping)
discord sync admin channel id: Канал для отправки логов (изменения никнеймов, изменения ролей)
discord sync username: Если включено, все никнеймы на сервере Discord будут синхронизированы с именами пользователей Discourse
discord sync verified role: Роль, которая будет добавляться всем пользователям, имеющим учётную запись Discourse
discord sync safe roles: Список ролей, которые бот будет игнорировать и помечать как назначенные вручную в Discord
Как использовать
Чтобы связать учётные записи, если вы разрешаете пользователям аутентифицироваться через Discord, они могут просто использовать этого провайдера. В противном случае им нужно перейти в Настройки учётной записи, прокрутить вниз до раздела Связанные учётные записи и нажать Подключить в строке Discord.
Живая демонстрация
Мы используем этот плагин в нашем экземпляре Discourse на Kodular Community, а сервер Discord доступен по адресу kodul.ar/discord:
Благодарности
Discourse Bot, создан @merefield
Большое спасибо Роберту за предоставление основы этого плагина. Это значительно помогло заложить фундамент всего плагина, позволив запустить Discord-бота в экземпляре Discourse (и отдельная благодарность за его трюк с установкой libsodium!).
Discourse Discord Sync, создан @angus
Альтернативный способ синхронизации уровней доверия с ролями Discord без необходимости использования бота.
Вход через Discord, создан командой Discourse
Этот плагин был бы невозможен без интеграции Discord OAuth2 (ранее — отдельный плагин) для связывания учётных записей Discourse и Discord.
Частичное включение опции входа, создано @Falco и @Roman
Также благодарим Falco и Roman за предоставление возможности включить провайдера входа только для «связывания» учётных записей без фактического включения опции аутентификации.
discordrb
Этот плагин использует гем discordrb, который позволяет подключаться к API Discord с помощью Ruby.
Это действительно круто! Я сам больше фанат Telegram, но и Discord тоже отлично подходит! Мне кажется, что Telegram хорошо сочетается с Discourse, ведь оба проекта — известные open-source решения, ориентированные на общение.
Было бы здорово, если бы здесь была функция кросс-постинга. Если кто-то напишет что-то в чате Discord, это создаст ответ в конкретном потоке Discord, известном как «поток чата». Это даст вашему сайту Discourse SEO-буст благодаря новому контенту в потоке чата.
Мне также очень нравится Telegram, и мы использовали его с публичной группой чата. Но несколько дней назад мы перешли на Discord, потому что у нас было более 1000 участников, и moderровать такую большую группу довольно сложно. С Discord это было легко сделать благодаря их системе ролей.
Помимо бота для Discord от @merefield, существует также плагин для синхронизации ролей Discord и групп Discourse на основе чистого OAuth2 (без использования ботов), например, для синхронизации уровня доверия 3 с ролью в Discord. Вот ссылка:
Это синхронизирует Discourse → Discord. Однако мы больше полагаемся на роли в Discord, чем на группы Discourse, для идентификации типов заинтересованных сторон, поэтому было бы отлично, если бы этот плагин также мог выполнять синхронизацию Discord → Discourse, то есть добавлять пользователей Discourse в группы на основе их ролей в Discord, добавлять значки пользователям Discourse на основе их ролей в Discord, изменять имя пользователя в Discourse так, чтобы оно соответствовало имени пользователя в Discord (и не наоборот) и т. д.
Возможно ли сделать так, чтобы синхронизация работала в обратном направлении? То есть синхронизировать роли из Discord в группы Discourse, никнеймы и т.д.
Мы управляем ролями и прочим через Discord и хотели бы передавать их в Discourse.
Выглядит очень круто. Единственный вопрос: как именно происходит сопоставление с группой в Discord из Discourse? Только ли по названию? Если да, можно ли сделать так, чтобы мы определяли, какая группа соответствует какой роли, используя ID роли из Discord? Если такой вариант не подходит, не могли бы вы добавить белый список ролей? У меня всего несколько ролей, у которых есть группы в Discourse, но при этом используется множество ролей в Discord.
Эта конкретная функция крайне важна для нас, поскольку мы управляем всеми нашими ролями через Discord. Было бы здорово иметь возможность синхронизировать группы из Discord с Discourse. Даже если они будут «синхронизированы» только по имени, а права доступа и другие настройки будут конфигурироваться постфактум.
@barreeeiroo: у вас есть планы на что-то подобное? Или, может быть, вы можете посоветовать, как двигаться дальше? Ручное управление ролями через «Безопасные роли» почти устраивает. У меня есть роли с пробелами в названиях, поэтому я не могу добавить их в поле «Безопасные роли». Вместо того чтобы вручную обновлять все мои роли в Discord и добавлять их без пробелов, есть ли другой путь?
Было бы очень здорово, если бы группы из Discord можно было бы «отправлять» в группы Discourse, если это возможно.
Спасибо за вашу работу над этим плагином!
Редакция: Предложение использовать ID ролей вместо их названий наверняка решит множество проблем с моей стороны.
У меня всё ещё возникают проблемы с настройкой. Для ролей в Discord система ищет ID или имя? Также, вместо «защищённых ролей» можно ли добавить возможность синхронизировать только определённые роли?
Я не знаю Ruby, иначе бы предложил свою помощь. Скорее всего, я изучу основы или просто реализую что-то через API на Java.
Я нашёл свою проблему: вместо ID канала администратора использовал его название. Теперь мне осталось проверить права и роли, чтобы понять, почему ничего не происходит.
В этом и суть этого плагина? Он сломан? Также посмотрите на мой плагин для бота, упомянутый в первом сообщении, который выполняет синхронизацию с Discourse в сторону Discord (хотя и через команды бота).
Все плагины здесь присваивают вашим аккаунтам в Discord роли, которые у вас есть на Discourse. Они не присваивают ваши роли из Discord на ваш аккаунт на Discourse.
Нет, это работает так: если у вас есть роль «Community Moderator» в Discourse, она изменит вашу роль в Discord. Но если у вас есть роль «Community Moderator» в Discord, это не изменит вашу роль в Discourse.