Discord Sync: синхронизация форума Discourse с сервером Discord

Абсурдно дешево. Таких пользователей, которые готовы платить за это применение, не так много. Исследование этих тем, написание и поддержка программного обеспечения занимают время. Это не бесплатно, и если клиентов мало, цена отражает это.
Другая проблема: чем ниже цена, тем требовательнее клиенты. У меня просто нет времени разбираться с вопросами поддержки и задавать вопросы людям, которые заплатили за это 25 долларов.
Если у вас есть предложение, как я могу зарабатывать деньги и не получать проблем при продаже по низкой цене, пожалуйста, дайте мне знать.

5 лайков

Да, я помню, как обращался по поводу использования их плагина, и полностью понимаю, почему они хотят взимать такую сумму. Я знаю, что многие сообщества могут позволить себе такую цену, но для небольших сообществ это не всегда доступно.

В итоге я создал собственное решение, добавив функционал в своего Discord-бота (на Java, так как, насколько я понимаю, реализовать это полностью через плагин Discourse пока сложно), который включает двустороннюю логику. В будущем я надеюсь сделать эту функцию общедоступной после завершения работы над ботом, но это будет зависеть от того, сколько у меня будет свободного времени. Вот видео с демонстрацией работы моего бота, если кто-то захочет посмотреть: https://p185.p2.n0.cdn.getcloudapp.com/items/4guZZEP1/b138570f-071c-4373-ada5-b7ed2cd63b26.mp4

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

6 лайков

Вы знаете, что здесь уже существует фреймворк для Discord-бота Discourse, который можно форкнуть, изменить и расширить? Discord Bot Construction Kit 🤖. Он выполняет 99% рутинной работы, чтобы вы могли сосредоточиться на функциональной части (он даже работает на вашем сервере Discourse, поэтому дополнительная инфраструктура не требуется). Существующие функции служат ориентиром для того, что вы захотите добавить.

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

8 лайков

Думаю, я это видел — просто я не знаком с Ruby, поэтому добавил эту функцию напрямую в своего бота, над которым я работал годами ещё до использования Discourse. Я определённо мог бы рассмотреть возможность создания PR для этого, но когда я писал эту функцию для своего сообщества, у меня было очень мало времени, поэтому изучение Ruby было не вариантом. Однако я с удовольствием изучу Ruby как следующий язык программирования и попробую это сделать! :grinning:

Редактирование: Также спасибо, что напомнили, что это легко настраивается — я сначала этого не понял. В прошлый раз, когда я пытался модифицировать плагин Discourse, я просто почувствовал себя запуганным, lol

4 лайка

Дайте Ruby шанс, это на самом деле увлекательный язык программирования :slight_smile:

7 лайков

У меня возникла проблема при тестировании этого плагина: после завершения настройки во время тестирования появляется ошибка прав доступа.
Discordrb::Errors::NoPermission (У бота нет необходимых разрешений для выполнения этого действия!) lib/promotion.rb:136:in recalculate' app/models/group_user.rb:117:in recalculate_trust_level’

Прикрепляю скриншот для справки:

Не могли бы вы мне помочь?

2 лайка

Правильно ли настроены разрешения вашего бота в Discord? Бот должен находиться выше любых ролей, которые он назначает, и его роль должна иметь разрешение «Управление ролями» или «Администратор».

1 лайк

Да, мы предоставили все разрешения, включая «Администратор», «Управление ролями» и «Управление никнеймами».

Эта роль выше всех остальных ролей, которые она назначает?

Этот плагин не включен на нашем сервере, но вызывает ошибки в логах.

Ошибка gateway_check

discordrb (3.3.0) lib/discordrb/bot.rb:673:in `gateway_check’

discordrb (3.3.0) lib/discordrb/bot.rb:156:in `servers’

plugins/discourse-discord-sync/lib/utils.rb:72:in `sync_user’

plugins/discourse-discord-sync/plugin.rb:42:in `block (3 levels) in activate!’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:427:in `instance_exec’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:427:in `block in make_lambda’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:235:in `block in halting_and_conditional’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:516:in `block in invoke_after’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:516:in `each’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:516:in `invoke_after’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:131:in `block in run_callbacks’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:824:in `_run_save_callbacks’

activerecord (6.1.4.1) lib/active_record/callbacks.rb:457:in `create_or_update’

activerecord (6.1.4.1) lib/active_record/timestamp.rb:126:in `create_or_update’

activerecord (6.1.4.1) lib/active_record/persistence.rb:474:in `save’

activerecord (6.1.4.1) lib/active_record/validations.rb:47:in `save’

activerecord (6.1.4.1) lib/active_record/transactions.rb:298:in `block in save’

activerecord (6.1.4.1) lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status’

activerecord (6.1.4.1) lib/active_record/connection_adapters/abstract/database_statements.rb:318:in `transaction’

activerecord (6.1.4.1) lib/active_record/transactions.rb:350:in `with_transaction_returning_status’

activerecord (6.1.4.1) lib/active_record/transactions.rb:298:in `save’

activerecord (6.1.4.1) lib/active_record/suppressor.rb:44:in `save’

activerecord (6.1.4.1) lib/active_record/persistence.rb:628:in `block in update’

activerecord (6.1.4.1) lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status’

activerecord (6.1.4.1) lib/active_record/connection_adapters/abstract/database_statements.rb:318:in `transaction’

activerecord (6.1.4.1) lib/active_record/transactions.rb:350:in `with_transaction_returning_status’

activerecord (6.1.4.1) lib/active_record/persistence.rb:626:in `update’

lib/post_creator.rb:613:in `update_user_counts’

lib/post_creator.rb:214:in `block in create’

lib/post_creator.rb:408:in `block (2 levels) in transaction’

activerecord (6.1.4.1) lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `block in transaction’

activerecord (6.1.4.1) lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction’

activesupport (6.1.4.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize’

activesupport (6.1.4.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt’

activesupport (6.1.4.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize’

activesupport (6.1.4.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt’

activesupport (6.1.4.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize’

activerecord (6.1.4.1) lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction’

activerecord (6.1.4.1) lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `transaction’

activerecord (6.1.4.1) lib/active_record/transactions.rb:209:in `transaction’

lib/post_creator.rb:407:in `block in transaction’

lib/distributed_mutex.rb:33:in `block in synchronize’

lib/distributed_mutex.rb:29:in `synchronize’

lib/distributed_mutex.rb:29:in `synchronize’

lib/distributed_mutex.rb:14:in `synchronize’

lib/post_creator.rb:406:in `transaction’

lib/post_creator.rb:204:in `create’

lib/new_post_manager.rb:285:in `perform_create_post’

lib/new_post_manager.rb:223:in `perform’

app/controllers/posts_controller.rb:197:in `create’

actionpack (6.1.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action’

actionpack (6.1.4.1) lib/abstract_controller/base.rb:228:in `process_action’

actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:30:in `process_action’

actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks’

app/controllers/application_controller.rb:387:in `block in with_resolved_locale’

i18n (1.9.1) lib/i18n.rb:328:in `with_locale’

app/controllers/application_controller.rb:387:in `with_resolved_locale’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks’

actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:41:in `process_action’

actionpack (6.1.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action’

actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action’

activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument’

activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument’

activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument’

actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action’

actionpack (6.1.4.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action’

activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action’

actionpack (6.1.4.1) lib/abstract_controller/base.rb:165:in `process’

actionview (6.1.4.1) lib/action_view/rendering.rb:39:in `process’

rack-mini-profiler (2.3.3) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method’

actionpack (6.1.4.1) lib/action_controller/metal.rb:190:in `dispatch’

actionpack (6.1.4.1) lib/action_controller/metal.rb:254:in `dispatch’

actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch’

actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:33:in `serve’

actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve’

actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each’

actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve’

actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:842:in `call’

lib/middleware/omniauth_bypass_middleware.rb:71:in `call’

rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call’

rack (2.2.3) lib/rack/conditional_get.rb:40:in `call’

rack (2.2.3) lib/rack/head.rb:12:in `call’

actionpack (6.1.4.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call’

lib/content_security_policy/middleware.rb:12:in `call’

lib/middleware/anonymous_cache.rb:356:in `call’

rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context’

rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/cookies.rb:689:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call’

activesupport (6.1.4.1) lib/active_support/callbacks.rb:98:in `run_callbacks’

actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call’

logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call’

railties (6.1.4.1) lib/rails/rack/logger.rb:37:in `call_app’

railties (6.1.4.1) lib/rails/rack/logger.rb:28:in `call’

config/initializers/100-quiet_logger.rb:23:in `call’

config/initializers/100-silence_logger.rb:31:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call’

lib/middleware/enforce_hostname.rb:23:in `call’

rack (2.2.3) lib/rack/method_override.rb:24:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call’

rack (2.2.3) lib/rack/sendfile.rb:110:in `call’

actionpack (6.1.4.1) lib/action_dispatch/middleware/host_authorization.rb:92:in `call’

rack-mini-profiler (2.3.3) lib/mini_profiler/

Да, мы предоставили супер-администратора!

Просто уточню — этот плагин всё ещё работает, или мне поставить метку unmaintained / broken?

2 лайка

Я добавил это в свой файл app.yml, но по какой-то причине libsodium всё ещё не устанавливается. Что я делаю не так?