我正在寻找一种方法,将某个类别实现为一个简单的市场,用户可以在其中购买广告(阅读帖子)。
看起来,订阅插件可以实现对某个群组的付费添加,然后在订阅取消后,无论是手动还是通过程序,都可以将用户移除。
我想要实现的是一种订阅,允许在一个类别中发布帖子,然后将他们从允许发布的群组中移除。
这是否可以仅通过订阅插件实现,或者也许可以结合订阅和自动化来实现?
更简单地说,我想销售单个帖子。对帖子回复是免费的。
我正在寻找一种方法,将某个类别实现为一个简单的市场,用户可以在其中购买广告(阅读帖子)。
看起来,订阅插件可以实现对某个群组的付费添加,然后在订阅取消后,无论是手动还是通过程序,都可以将用户移除。
我想要实现的是一种订阅,允许在一个类别中发布帖子,然后将他们从允许发布的群组中移除。
这是否可以仅通过订阅插件实现,或者也许可以结合订阅和自动化来实现?
更简单地说,我想销售单个帖子。对帖子回复是免费的。
我认为你需要一个插件,在创建广告类别中的主题时将他们从群组中移除。
我觉得自动化插件不会将用户从群组中移除。
好吧,我自己不会编码,而且因为这将是一个概念验证,只有在我能让老板支持之后我才可能提供人民币支持,所以目前我没有任何的金钱支持。
还有其他人认为这样的东西对社区有帮助吗?
还有一个考虑点,是Discourse和订阅插件之间是否有任何通信机制,可以追踪用户拥有多少订阅?这会很有帮助,可以让用户一次性购买多个帖子,而不是买一个,然后发帖,再买另一个,然后再次发帖。
你只需要让他用想象力来做概念验证。
你很可能需要使用 webhook 和像 Zapier 这样的 webhook 工具来完成。
这将使插件更加复杂。
当然,但拥有它会很酷。
不过,只要你硬编码类别 ID 和组名,它似乎就能胜任。
有没有真正的程序员能在此基础上进行扩展,以便你可以从插件的设置页面设置这些变量?
# name: discourse-auto-remove-group
# version: 0.1
# authors: tknospdr
# url: https://github.com/tknospdr/discourse-auto-remove-group
enabled_site_setting :auto_remove_group_enabled
# 启用/禁用插件的站点设置
register_site_setting :auto_remove_group_enabled, type: :boolean, default: false
register_site_setting :auto_remove_group_category_id, type: :integer, default: 0
register_site_setting :auto_remove_group_name, type: :string, default: ""
after_initialize do
# 监听帖子创建事件
DiscourseEvent.on(:post_created) do |post|
next unless SiteSetting.auto_remove_group_enabled
next unless post&.user # 确保帖子有用户
next unless post&.topic&.category_id # 确保帖子在某个类别中
target_category_id = SiteSetting.auto_remove_group_category_id
group_name = SiteSetting.auto_remove_group_name
# 检查帖子是否在配置的类别中
if post.topic.category_id == target_category_id
begin
group = Group.find_by(name: group_name)
unless group
Rails.logger.error("AutoRemoveGroup: Group '#{group_name}' not found")
next
end
user = post.user
if group.users.include?(user)
group.remove(user)
Rails.logger.info("AutoRemoveGroup: Removed user #{user.username} from group #{group_name} after posting in category #{target_category_id}")
else
Rails.logger.info("AutoRemoveGroup: User #{user.username} is not in group #{group_name}, no action taken")
end
rescue StandardError => e
Rails.logger.error("AutoRemoveGroup: Error removing user from group: #{e.message}")
end
end
end
end
这或许可行!
从 Discourse-plugin-skeleton 开始,将其作为你的 plugin.rb,也许可以看看 Ask.discourse.com 能提供什么帮助。
并使用 add_model_callback 而不是 Discourse.event。你可以在 all_the_plugins 仓库中找一些例子。
Grok 和 ask.discourse.com 都建议将插件安装在 /var/discouse/plugins/。
问题是我没有这个路径,无论是在容器内还是容器外。我找到的最接近的路径是容器内的 /var/www/discourse/plugins/。
当我尝试在那里安装并重建时,它消失了。
好的,所以机器人说这对于自托管安装来说是正常的。我不知道如何设置一个合适的 Git 存储库来以正常方式安装插件。有人能帮我解决这个问题吗?
我以为我已经配置好了git,安装了插件,但遇到了一些错误。说实话,我就到这里就迷失了。
/var/www/discourse/plugins/discourse-auto-remove-group/plugin.rb:9:in `activate!': 未定义方法 `register_site_setting',对一个 Plugin::Instance 的实例调用(NoMethodError)
由于插件中的错误,您无法启动Discourse
/var/www/discourse/plugins/discourse-auto-remove-group
请尝试删除此插件并重新构建!
我,[2025-05-20T16:17:10.306025 #1] 信息 -- :
我,[2025-05-20T16:17:10.347496 #1] 信息 -- : 终止异步进程
我,[2025-05-20T16:17:10.350251 #1] 信息 -- : 发送INT信号到 HOME=/var/lib/postgresql 用户=postgres 执行 chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 42
我,[2025-05-20T16:17:10.351238 #1] 信息 -- : 发送TERM信号到执行 chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 109
2025-05-20 16:17:10.351 UTC [42] 日志:接收到快速关闭请求
109:signal-handler (1747757830) 收到 SIGTERM 计划关闭...
109:M 20 5月 2025 16:17:10.368 # 用户请求关闭...
109:M 20 5月 2025 16:17:10.369 * 在退出前保存最后的 RDB 快照。
2025-05-20 16:17:10.412 UTC [42] 日志:中止正在进行的事务
2025-05-20 16:17:10.438 UTC [42] 日志:后台工作进程 "逻辑复制启动器" (PID 56) 以退出码 1 退出
2025-05-20 16:17:10.438 UTC [51] 日志:关闭中
2025-05-20 16:17:10.447 UTC [51] 日志:检查点开始:立即关闭
2025-05-20 16:17:10.526 UTC [51] 日志:检查点完成:写入 0 缓冲区 (0.0%);添加了 0 个 WAL 文件,删除了 0 个,回收了 0 个;写入时间=0.001秒,同步=0.001秒,总计=0.088秒;同步文件=0,最长=0.000秒,平均=0.000秒;距离=0 kB,估计=4 kB
2025-05-20 16:17:10.540 UTC [42] 日志:数据库系统已关闭
109:M 20 5月 2025 16:17:10.947 * 数据库已保存到磁盘
109:M 20 5月 2025 16:17:10.947 # Redis 现已准备好退出,再见...
失败
--------------------
Pups::ExecError: 进入 /var/www/discourse 目录并以 discourse 用户身份执行 'bundle exec rake db:migrate' 失败,返回状态 #Process::Status: pid 987 退出码 1
出错位置:/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
执行失败,参数为 {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
引导失败,退出代码为 1
** 引导失败 **,请向上滚动查找更早的错误信息,可能还有其他错误。
./discourse-doctor 命令可能有助于诊断问题。
9fed9596b10ffb4628947e678585b813813ae27a4de746feba16e89f2b9cdc51
你有设置开发实例吗?
我甚至不知道那是什么意思。:微笑:
如果您正在运行生产环境安装,应该在您的 app.yml 文件中放置 Github 仓库的 URL。
您采用的克隆方法更适合开发环境的安装,但我认为您不是在运行开发环境(因为您使用的是 launcher)。
啊,是的,这就是我做的。
我在 app.yml 文件中添加了一行 git clone,然后重新构建以让事情运行起来。
很高兴你让它正常运行了!
如果您要开发插件,那么使用 使用 Docker 安装 Discourse 进行开发 或 在 Windows 上安装 Discourse 进行开发 或 Linux 或 Mac 进行设置会快 1000 倍。
这意味着您可以编辑一个文件,然后在浏览器中刷新以查看它是否有效。有时甚至不需要刷新。