Мост между Discourse и чатом (Telegram)

Ладно, я исправил это.

1 лайк

Плагин моста теперь совместим с последней версией Discourse с тестом passed.

5 лайков

Я с нетерпением жду, когда это будет поддерживать QQ в дальнейшем

1 лайк

Насколько я понял из последних сообщений в теме: плагин работает. Пожалуйста, подтвердите, верно ли я понял.

Можно ли узнать, работает ли этот плагин с темами Telegram (разделами чата)?

Большое спасибо за вашу работу.

Добро пожаловать в Meta :wave:

Последние сообщения были написаны до последнего редактирования первого поста, в котором был добавлен тег broken.

Так что, я предполагаю, что проблема всё ещё не решена.

3 лайка

Я рад сообщить, что этот плагин снова совместим с последней версией Discourse :rocket:

9 лайков

Мне это очень нравится. Я не использую Telegram, но мне нравится возможность, которую этот проект наконец-то даст нам для интеграции с Matrix <3

Есть ли способ получить логи плагина? @Lhc_fl
Я пытаюсь разобраться, почему он работает только в одну сторону (Discourse → Telegram). У бота, конечно, есть права на доступ к сообщениям группы. В консоли нет никаких видимых логов :thinking:

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

Даже ошибки или предупреждения, связанные с плагином, не записываются в production.log / production_error.log.

Я подозреваю проблему, связанную с вебхуком, и судя по всему, плагин не отключается при ошибках?

Так как он работает в одну сторону, предоставленные учетные данные точно верны. Если у кого-то есть идея, как получить логи, записываемые плагином, пожалуйста, дайте знать.

Просто скрываются логи уровня INFO и DEBUG. Я почти уверен, что Rails.logger.error будет записывать логи ошибок в продакшене :thinking: Остальные логи по замыслу не должны появляться в продакшене.

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

Попробуйте открыть эту ссылку в браузере и посмотрите, какой результат вы получите:

https://api.telegram.org/bot{token}/setWebhook?url=https://your.discourse.site/chat-bridge/telegram/hook/123456

Замените {token} на токен вашего бота.

Если вебхук настроен правильно, вы получите сообщение «ok».

Да, могу подтвердить, что это работает:

{"ok":true,"result":true,"description":"Webhook was set"}

Это странно. И если создание сообщения не удалось, ошибка будет записана в лог здесь; вы сможете увидеть её по адресу https://your.discourse.site/logs

Неужели это действительно проблема с правами доступа? Если ответить напрямую на сообщение из моста, созданное ботом Telegram, оно будет отправлено успешно?

1 лайк

Я сейчас вижу несколько логов, связанных с модулем, в /logs:

[Discourse -> Telegram] Ошибка в chat_message_created:
Проверка объекта результата ChatBridgeModule::Provider::Telegram::Services::HandleDiscourseMessage:

[1/8] [params] default (0.0555 мс) ✅
[2/8] [model] bot (0.0178 мс) ✅
[3/8] [step] ensure_bot_valid ❌

(еще 5 шагов не показаны, так как выполнение было остановлено до их достижения)

Причина ошибки:

INVALID_BOT
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `block in warn'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `warn'

/var/www/discourse/plugins/discourse-chat-bridge/lib/chat_bridge_module/provider/telegram/bridge.rb:51:in `block (3 levels) in <main>'

/var/www/discourse/lib/scheduler/defer.rb:125:in `block in do_work'

rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'

rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'

/var/www/discourse/lib/scheduler/defer.rb:119:in `do_work'

/var/www/discourse/lib/scheduler/defer.rb:105:in `block (2 levels) in start_thread'

Но это было вчера, и после этого ошибка не повторялась, поэтому я предполагаю, что это было связано с добавлением бота, когда еще не были выполнены все требования. После этого больше не было логов плагина моста. Если, конечно, это не привело к тому, что он никогда больше не работал :confused:

Нет, это не работает.

Интересно, возможно ли посмотреть на секрет, созданный плагином, так как это позволило бы создать его вручную?

Я только что заметил одну вещь, просматривая логи Nginx (так как вызов вебхука должен происходить здесь)

[26/Jan/2025:12:05:39 +0000] "forum.xyz.org" 91.108.5.109 "POST /chat-bridge/telegram/hook/123456 HTTP/1.1" "-" "chat_bridge_module/telegram_webhook/hook" 403 5865 "-" 0.009 0.010 "-" "-" "-" "-" "-" "-" "-"

Это тот вебхук, который я создал вручную ранее, верно?

… и мы продвинулись на шаг вперед. Я вручную установил путь к секрету через консоль Rails и адаптировал вебхук вручную. POST-запрос к Discourse теперь успешен. И теперь есть реальная ошибка:

/var/www/discourse/plugins/discourse-chat-bridge/lib/chat_bridge_module/provider/telegram/services/handle_tg_message.rb:110:in `message_creation_succeed'

/var/www/discourse/lib/service/base.rb:156:in `instance_exec'

/var/www/discourse/lib/service/base.rb:156:in `run_step'

/var/www/discourse/lib/service/base.rb:199:in `run_step'

/var/www/discourse/lib/service/base.rb:139:in `block in call'

/var/www/discourse/lib/service/base.rb:165:in `with_runtime'

/var/www/discourse/lib/service/base.rb:139:in `call'

/var/www/discourse/lib/service/base.rb:457:in `block in run!'

/var/www/discourse/lib/service/base.rb:457:in `each'

/var/www/discourse/lib/service/base.rb:457:in `run!'

/var/www/discourse/lib/service/base.rb:450:in `run'

<internal:kernel>:90:in `tap'

/var/www/discourse/lib/service/base.rb:302:in `call'

/var/www/discourse/plugins/discourse-chat-bridge/lib/chat_bridge_module/provider/telegram/bridge.rb:9:in `block (3 levels) in <main>'

/var/www/discourse/lib/scheduler/defer.rb:125:in `block in do_work'

rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'

rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'

/var/www/discourse/lib/scheduler/defer.rb:119:in `do_work'

/var/www/discourse/lib/scheduler/defer.rb:105:in `block (2 levels) in start_thread'
Исключение задачи: В params.message creation: Проверка объекта результата Chat::CreateMessage:

[ 1/28] [options] default (0.0168 мс) ✅
[ 2/28] [policy] no_silenced_user (0.0148 мс) ✅
[ 3/28] [policy] accept_blocks (0.0051 мс) ✅
[ 4/28] [params] default (0.0742 мс) ✅
[ 5/28] [model] channel (0.7018 мс) ✅
[ 6/28] [step] enforce_membership (0.013 мс) ✅
[ 7/28] [model] membership ❌

(еще 21 шаг не показан, так как выполнение было остановлено до их достижения)

Причина ошибки:

/var/www/discourse/lib/service/base.rb:184:in `run_step': Модель не найдена (ArgumentError)

          raise ArgumentError, "Model not found"
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	from /var/www/discourse/lib/service/base.rb:139:in `block in call'
	from /var/www/discourse/lib/service/base.rb:165:in `with_runtime'
	from /var/www/discourse/lib/service/base.rb:139:in `call'
	from /var/www/discourse/lib/service/base.rb:457:in `block in run!'
	from /var/www/discourse/lib/service/base.rb:457:in `each'
	from /var/www/discourse/lib/service/base.rb:457:in `run!'
	from /var/www/discourse/lib/service/base.rb:450:in `run'
	from <internal:kernel>:90:in `tap'
	from /var/www/discourse/lib/service/base.rb:302:in `call'
	from /var/www/discourse/plugins/discourse-chat-bridge/lib/chat_bridge_module/provider/telegram/services/handle_tg_message.rb:91:in `fetch_message_creation'
	from /var/www/discourse/lib/service/base.rb:156:in `instance_exec'
	from /var/www/discourse/lib/service/base.rb:156:in `run_step'
	from /var/www/discourse/lib/service/base.rb:182:in `run_step'
	from /var/www/discourse/lib/service/base.rb:139:in `block in call'
	from /var/www/discourse/lib/service/base.rb:165:in `with_runtime'
	from /var/www/discourse/lib/service/base.rb:139:in `call'
	from /var/www/discourse/lib/service/base.rb:457:in `block in run!'
	from /var/www/discourse/lib/service/base.rb:457:in `each'
	from /var/www/discourse/lib/service/base.rb:457:in `run!'
	from /var/www/discourse/lib/service/base.rb:450:in `run'
	from <interna...

Но это больше похоже на проблему конфигурации :thinking: Интересно, почему мне нужно что-то корректировать.

О, это не ожидаемо. Похоже, я ошибся здесь при адаптации к новой версии Discourse. Разберусь с этим.

2 лайка

Спасибо! Дайте знать, если я смогу чем-то помочь.

Привет, @Lhc_fl! Хотел бы вежливо спросить, не отменили ли вы планы по исправлению этого :slight_smile:

1 лайк