Discord Sync: sincronizar un foro de Discourse con un servidor de Discord

ridículamente barato. No hay muchas personas interesadas en este caso de uso que estén dispuestas a pagar dinero por él. Lleva tiempo investigar estos temas, escribir y mantener el software. Eso no es gratis y si no hay muchos clientes, el precio lo refleja.
El otro problema es: cuanto menor sea el precio, más exigentes serán los clientes. Simplemente no tengo tiempo para lidiar con problemas de soporte y preguntas de personas que pagaron $25 por él.
Si tienes alguna sugerencia sobre cómo puedo ganar dinero y no ser molestado mientras vendo a un precio bajo, házmelo saber.

5 Me gusta

Sí, recuerdo haber contactado sobre el uso de su plugin, y puedo entender totalmente por qué querrían cobrar lo que cobran. Sé que muchas comunidades pueden permitirse ese precio, pero no es necesariamente asequible para comunidades más pequeñas.

Terminé creando mi propia solución añadiéndola a mi bot de Discord (basado en Java, ya que no creo que pudiera hacer esto fácilmente solo a través de un plugin de Discourse, al menos no todavía), que tiene la funcionalidad añadida de cierta lógica bidireccional. En el futuro, espero hacer esta función disponible al público una vez que mi bot de Discord esté terminado, pero eso dependerá de cuánto tiempo libre tenga. Aquí está mi bot en acción en caso de que alguien quiera echar un vistazo: https://p185.p2.n0.cdn.getcloudapp.com/items/4guZZEP1/b138570f-071c-4373-ada5-b7ed2cd63b26.mp4

Además, si alguien estuviera interesado en ser un beta tester una vez que lo haga público, no dude en enviarme un mensaje directo. No tengo una fecha estimada de cuándo tendré algo funcionando, pero podría considerar hacer de esto una función independiente si es necesario.

6 Me gusta

¿Te das cuenta de que ya existe un framework de bot de Discord para Discourse que puedes bifurcar, modificar y extender? Discord Bot Construction Kit 🤖. Realiza el 99% del trabajo de mantenimiento para que puedas centrarte en el lado funcional (incluso se ejecuta en tu servidor de Discourse, por lo que no se requiere infraestructura adicional). Las características existentes actúan como una guía para lo que quieras añadir.

También aceptaría PR si se te ocurriera algo útil para otras comunidades.

8 Me gusta

Creo que sí lo vi, solo que no estoy familiarizado con Ruby, así que simplemente agregué la función directamente a mi bot en el que ya estaba trabajando durante años antes de usar Discourse. Definitivamente consideraría hacer una PR para eso, pero cuando escribí esta función para mi comunidad, tenía poco tiempo, por lo que aprender Ruby estaba fuera de discusión. ¡Definitivamente consideraría tomar Ruby como mi próximo lenguaje de programación y darle una oportunidad! :grinning:

Editar: También gracias por mencionar que es fácilmente personalizable, no me di cuenta al principio. Simplemente me intimidé la última vez que intenté modificar un plugin de Discourse lol.

4 Me gusta

Dale una oportunidad a Ruby, es un lenguaje de programación muy divertido :slight_smile:

7 Me gusta

Tengo un problema al probar este plugin después de configurarlo. Durante la prueba, obtengo un error de permiso.
Discordrb::Errors::NoPermission (¡El bot no tiene el permiso requerido para hacer esto!) lib/promotion.rb:136:in recalculate' app/models/group_user.rb:117:in recalculate_trust_level’

Adjunto una captura de pantalla como referencia:

¿Alguien podría ayudarme aquí?

2 Me gusta

¿Tiene tu bot de Discord los permisos configurados correctamente? Necesitarías que el bot esté por encima de cualquier rol que vaya a asignar y que tenga el permiso Administrar roles o Administrador en el rol del bot.

1 me gusta

Sí, hemos proporcionado todos los permisos, incluidos Administrador, Gestionar roles y Gestionar apodos.

¿Ese rol está por encima de todos los demás roles que asignaría?

Este plugin no está habilitado en nuestro servidor, pero está causando errores en los registros.

Error de 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/

sí, ¡hemos proporcionado superadministrador!

Solo para comprobar: ¿este plugin sigue funcionando o debería ponerle una etiqueta de unmaintained / broken?

2 Me gusta

He agregado esto a mi archivo app.yml pero por alguna razón todavía no está instalando libsodium. ¿Qué estoy haciendo mal?