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

Можно ли использовать это без спавна при работе через консоль в Discourse?

Я вижу, что бот сообщает мне об ошибках, когда я пытаюсь сделать ремеп :smiling_face_with_tear:

Я не совсем уверен, что вы имеете в виду. Взаимодействие должно происходить только в Discord.

Однако, какие именно ошибки вы получаете? Я посмотрю это в ближайшее время.

1 лайк

У меня тоже возникает эта проблема: при входе в контейнер Discourse и запуске приглашения rails c создаётся ещё один экземпляр бота. В результате такие команды, как Ping!, возвращают Pong! дважды, а также возникают проблемы, например невозможность изменить имя пользователя или никнейм через discordrb.

Выполнение команды ::DiscordBot::Bot.discord_bot.stop приводит к завершению экземпляра, созданного через rails c, но он не может взаимодействовать с ботом, запущенным при старте Discourse.

1 лайк

Спасибо за отчет. Я зафиксировал это как известную проблему (редактирование: готово — добавлено в раздел «Известные проблемы» в исходном сообщении). Я подозреваю, что она ведет себя так с самого начала, и учитывая, что о ней сообщалось лишь несколько раз и совсем недавно, я полагаю, что в целом это не считается серьезной проблемой, так как это крайний случай.

Поскольку вы, судя по всему, технически подкованы, мы будем рады получить от вас pull request, если вы сможете это исправить.

1 лайк

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


1 лайк

Да, нам нужно уметь проверять, запущен ли экземпляр, и не запускать новый, если он уже существует.

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

Если бы у меня было больше времени, я бы посмотрел на это раньше, но если хотите попробовать — пожалуйста.

Похоже, что при запуске консоли Rails переменная @@DiscordBot привязывается к другому боту в другом потоке, в то время как оригинальный остаётся без изменений. Не уверен, можно ли определить запуск консоли Rails и предотвратить запуск второго бота, но это объясняет, почему я могу выполнить команду остановки бота через Rails, не затрагивая тот, который был запущен вместе с Discourse.

1 лайк

Привет,

Отличная работа! Я хотел бы использовать это, но сначала у меня есть вопрос, который отчасти связан с этим, в общем-то…

Я использую Discourse WP-Connect для того, чтобы WordPress выступал в роли «мастера» для SSO (этот плагин также поддерживает вход через Discord). Знаете ли вы, какие «переменные пользователя» нужно передавать в запросе SSO, чтобы этот плагин мог сопоставить аккаунт с пользователем Discord? Или достаточно только email (я предполагаю, что нет)?

Я уже передаю некоторые дополнительные значения, так что надеюсь, смогу просто добавить ещё одно?

Как указано в первом посте, для установления связи требуется аутентификация через Discord (с использованием встроенной базовой логики).

Жёстко заданный SSO из WordPress помешает этому, особенно для новых пользователей.

Если вы найдёте способ обойти это, будем рады получить ваш Pull Request или дополнительную документацию.

Хорошая работа, молодцы. Это полезное наблюдение.

Правильно, но это не совсем то, что я просил. Возможно, лучше обратиться в поддержку, так как вход через Discord теперь встроен в Discourse.

1 лайк

Да, поддержка единого входа (SSO) для WordPress выходит за рамки возможностей этого плагина.

Однако, чтобы направить вас в правильном направлении, вам потребуется запись в этой таблице:

Это выполняется автоматически при входе через Discord.

Сомневаюсь, что WordPress SSO может заполнить это поле вместо Discord, но готов ошибаться.

1 лайк

У меня также есть источник OAuth, который пользователи должны использовать вместо Discord. Чтобы обойти это, я оставил OAuth для Discord, как указано в исходном сообщении, но с помощью пользовательского CSS скрыл все остальные источники входа, кроме того, который я хочу, чтобы пользователи использовали, используя опцию CSS display: none;. Возможность входа через OAuth с Discord «технически» всё ещё присутствует в HTML, но обычный конечный пользователь никогда её не найдёт.

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


image

Круто, это могло бы стать рабочим решением, хотя я, возможно, изучу и реальное программное решение. Это отображается в настройках Discourse? Может, стоит продолжить обсуждение в личных сообщениях, чтобы не раздувать эту тему?

Почему вы сопоставляете каналы Discord с категориями Discourse, а не с темами? Это связано с тем, что могут существовать темы с одинаковыми названиями? Я хотел бы настроить так, чтобы 5 каналов вели к соответствующим темам в 3 категориях, но, похоже, это невозможно?

Потому что анонсы одной и той же темы быстро наскучат?

Это сделано намеренно на высоком уровне, чтобы вы могли анонсировать новые темы в конкретных категориях.

2 лайка

Извините, я имел в виду это
image

2 лайка

Это был запрос от клиента :money_bag:

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

2 лайка

Я понимаю

Конечно, однако, так как используется система категорий, я не могу, например, создать поток «#ford-support» в моей категории «Ford», который синхронизируется с каналом #ford-support в Discord. Ruby — не мой язык выбора, поэтому я сомневаюсь, что смогу сделать форк и внести изменения (как я делаю для многих других вещей, не связанных с Ruby).

Было бы легко сделать это на основе имени темы/потока? Или, возможно, есть какие-то ограничения?

Кстати, изображения (интересно, что GIF-файлы — да) не синхронизируются с темой. Не уверен, известно ли об этом?

РЕДАКТИРОВАНИЕ: О, подождите, кажется, я могу просто переместить тему после её создания.

В последний раз, когда я проверял, потоки (threads) не были доступны в Ruby Discord API, но мне сказали, что их «готовили» (ещё два года назад!).

Я бы с радостью принял PR с поддержкой потоков, как только это станет возможным.

Боюсь, что в последнее время я слишком распылён, чтобы сосредоточиться на разработке новых функций для плагинов, кроме тех, что связаны с платной работой, но с удовольствием рассмотрю ваш PR.

1 лайк