Discord同步:将Discourse论坛与Discord服务器同步

确实很便宜。对这个用例感兴趣并愿意为此付费的人不多。研究这些主题、编写和维护软件都需要时间。这些都不是免费的,如果客户不多,价格就会反映出来。
另一个问题是:价格越低,客户的要求就越多。我没有时间处理那些花了 25 美元购买的人的支持问题和疑问。
如果您有关于如何在低价销售的同时赚钱而不被骚扰的建议,请告诉我。

5 个赞

是的,我记得联系过他们关于使用他们的插件,而且我完全理解他们为什么会收取那么高的费用。我知道许多社区能够负担得起这个价格,但对于较小的社区来说,这并不一定负担得起。

我最终通过在我的 Discord 机器人(基于 Java,因为我认为我目前还无法完全通过 Discourse 插件轻松实现这一点)中添加功能来自己解决了这个问题,它还具有一些双向逻辑的附加功能。未来,我希望在我的 Discord 机器人完成后将此功能公之于众,但这将取决于我拥有的空闲时间。如果有人想看看,这是我的机器人运行时的样子:https://p185.p2.n0.cdn.getcloudapp.com/items/4guZZEP1/b138570f-071c-4373-ada5-b7ed2cd63b26.mp4

另外,如果有人有兴趣在我公开此功能后成为 beta 测试者,请随时给我发私信——我没有关于何时能完成的预计时间,但如果需要,我可能会考虑将其作为一个独立的功能。

6 个赞

您是否意识到这里已经存在一个 Discourse Discord Bot 框架,您可以对其进行分叉、修改和扩展?https://meta.discourse.org/t/discord-bot-run-one-on-your-discourse-server-keep-things-in-sync/122530。它完成了 99% 的管理工作,因此您可以专注于功能方面(它甚至可以在您的 Discourse 服务器上运行,无需额外的基础设施)。现有功能可以作为您想要添加的任何内容的指南。

如果您能提出对其他社区有用的功能,我也将接受 PR。

8 个赞

我好像确实看到过——我只是不熟悉 Ruby,所以我直接将这个功能添加到了我已经在使用的、并且已经开发了多年的机器人中,而不是使用 Discourse。我绝对会考虑为此提交一个 PR(Pull Request),但当我为我的社区编写这个功能时,我时间紧迫,学习 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。我哪里做错了?