Набор для создания ботов Discord 🤖

С удовольствием пригласил бы вас в свой инстанс! Не знаю, логирует ли ваш плагин что-либо, но если это поможет, я могу отправить вам эти логи.

РЕДАКТИРОВАНИЕ: Какие разрешения вы предоставили боту при его авторизации?

1 лайк

Боту необходимы права администратора:

Необходимо предоставить разрешения через браузер, как описано здесь (и в исходном сообщении):

Что-то вроде: https://discord.com/api/oauth2/authorize?client_id=ВАШ_CLIENT_ID&scope=bot&permissions=8

Ваша проблема почти наверняка на стороне Discord, так как сервер бота Discourse, похоже, работает (вы это показали с помощью команды Ping!), поэтому логи Discourse не будут релевантны.

Я только что повторно протестировал этот плагин на последней версии Discourse, и всё работает (я обновил несколько gems до более современных версий, чтобы обеспечить совместимость с другими плагинами, но это не относится к вашей проблеме).

Да, я уже несколько раз приглашал его снова, но ничего не изменилось. Он является администратором, у него есть разрешение бота. Я тот, кто приглашает его в Discord, я владелец сервера Discord. Он просто не распознаёт меня и выдает сообщение: «У вас нет прав на выполнение команды discsync!»

К сожалению, я в полном недоумении!

1 лайк

Вы настроили это в параметрах Discourse?:

2 лайка

Ура! Похоже, мне каким-то образом удалось исказить ID группы администраторов! Похоже, при копировании/вставке я пропустил одну цифру…

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

!discsync false, 0, true

Правильно ли это? Для меня она возвращает следующее:

РЕДАКТИРОВАНИЕ: То же самое возвращается, если запустить команду без запятых, то есть:

!discsync false 0 true

2 лайка

Повысьте уровень видимости. Стандартные автоматические группы по умолчанию имеют уровень видимости 1 («Зарегистрированные пользователи»), поэтому, если это значение равно нулю, вы исключаете стандартные автоматические группы:

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

3 лайка

Со мной всё в порядке. Большое спасибо — очень ценю.

Могу ли я чем-то отплатить, написав часть того, что узнал, в ваш гайд? Если нет, то без проблем; я просто хочу передать вашу поддержку дальше.

3 лайка

Это очень любезно. Буду рад, если вы отредактируете его. Вы, наверное, уже можете это сделать? Это вики.Вы также помогли мне освежить память :slight_smile:

2 лайка

Мне не особо нужна синхронизация ролей, но было бы здорово иметь Discord-бота, который публикует сообщения в конкретных каналах сервера Discord, когда в форуме создаются новые темы. Есть ли какой-нибудь плагин, способный на это?

1 лайк

Да, этот плагин, скорее всего, не подходит для этой задачи. Бот работает на основе вашего Discourse и может получать доступ к данным Discourse (там, где это разрешено и инициировано командой), но выполняется в отдельном потоке, поэтому не реагирует на события Discourse.

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

Похоже, вам стоит изучить:

Или

1 лайк

Да, я проверил оба этих варианта. Первый вариант, Zapier, не бесплатный. Можно создать до 5 бесплатных Zaps, и они поддерживают только одношаговые сценарии. Это точно то, что было сказано в той ветке, поэтому в качестве альтернативы предложили плагин discourse-chat-integration, который, по утверждению, является официальным. Мне кажется, это самый близкий способ реализовать то, что я хочу.

Последний вариант, похоже, это плагин для RSS-ленты:

Обновление: После того как я научился правильно настраивать правила и конфигурировать вебхуки, интеграция чата делает именно то, что я хотел! Спасибо.

4 лайка

Привет, @merefield,

ещё раз спасибо за то, что поделились этим плагином!

Я установил всё, как описано в документации. Использую команду !discsync, и всё выглядит отлично. :smiling_face_with_three_hearts:

Однако для некоторых пользователей (но не для всех) я получаю эту ошибку для всех их групп:

Discourse Sync:  [11/31] Добавление участника 'MaxMustermann' в группу 'Member'
Discourse Sync:  Похоже, у меня нет прав для этого!
ОШИБКА на сервере XYZ (ID: 123123123123) для команды ^add_role: неопределённый метод add_role' для nil:NilClass

Другие пользователи успешно синхронизируются для той же группы :thinking:

1 лайк

Это означает, что для этого пользователя в Discourse не установлен параметр provider_uid. Пожалуйста, проведите расследование.

Кстати, отличная работа по настройке! Это довольно сложно и не для слабонервных! :).

2 лайка

Я выполнил этот запрос в плагине Knowledge Explorer:

SELECT *
FROM   user_associated_accounts  u 
WHERE  u.provider_name = 'discord' 

По причинам :smile: я не могу опубликовать результат, но я проверил provider_uid для каждого пользователя, и у каждого он есть. Есть ли что-то ещё, что можно отладить?

1 лайк

Затем наиболее вероятная проблема заключается в том, что текущий сопоставленный UID Discord неверен.

То есть данные в Discourse не соответствуют действительному UID в Discord.

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

2 лайка

Привет, я могу это подтвердить. У пользователя в Discourse другой UID, чем в Discord.

Как можно воспроизвести эту проблему?

1 лайк

Можете ли вы удалить связь и попросить пользователя создать её заново, снова привязав Discord? Если это произойдет снова, значит, в социальном входе есть ошибка?

2 лайка

Привет,

Хотел просто зайти с напоминанием. Я поговорил с людьми, у которых возникли эти проблемы. Нам удалось определить возможную причину.

Пользователь зарегистрировался со своим старым аккаунтом Discord, к которому он не присоединился на сервере. Поэтому Sync Bot, вероятно, не смог найти пользователя Discord и выдал ошибку.

2 лайка

Спасибо за уточнение. Можете подтвердить, как вы решили проблему? Вы удалили его ассоциацию, а затем попросили его ассоциироваться заново?

1 лайк

Именно так мы и поступили. :blush:

2 лайка