Crius
(Crius)
2024 年 1 月 4 日午前 3:11
1
タイトルは少し分かりにくいかもしれませんが、文脈としては、カテゴリを「プライベート」に変換しつつ、過去の「期間」にそれに参加したすべてのユーザーを特定してグループに追加し、アクセス権を設定できるようにしたいということです。
グループは事前に作成できると仮定します。
現在サポートされていること:
グループの作成
カテゴリへのグループの権限割り当て
カテゴリの権限の変更
不足しているのは、「特定の期間におけるこのカテゴリでのやり取りに基づいて、これらのユーザーをグループに割り当てる」方法です。
それらのユーザーを特定し、グループに割り当てることができるクエリまたはコードはありますか?
jericson
(Jon Ericson)
2024 年 1 月 4 日午前 6:20
2
Crius:
過去ので参加したすべてのユーザーを特定する
user_actionsに基づいてトピックに参加したユーザーを特定するために、Data Explorerクエリを使用しました。
-- [params]
-- int :topic = 3620561
select user_id,
sum(action_type) actions,
sum(case action_type when 5 then 1 else 0 end) replies
from user_actions ua
join users u on u.id = ua.user_id
where target_topic_id = :topic
and moderator is false
and admin is false
group by ua.user_id
これには、返信、いいね、編集、メンションなどのアクションが含まれます。また、投票の回答を含むクエリもあります。これはリードを収集するためのものでしたが、返信以外の何かをした人のうち、トピックに貢献した人がいると予想しています。「参加した」を定義することは、有益な演習になるでしょう。
カテゴリ全体に拡張するには、topics t on target_topic_id = t.idと結合し、where句にcategory_idを追加します。ua.created_atに基づいて期間を定義するのは難しくないはずです。
「いいね!」 2
Crius
(Crius)
2024 年 1 月 8 日午後 4:17
3
@jericsonさん 、ありがとうございます。まさに探していたものです。\n\n結果をクエリに渡して、すべてのユーザーをグループに追加できると推測しています。\nそのような経験をしたことがある人はいますか?利用可能なものがあれば、ユーザーIDをひたすらコピー&ペーストしてRuby関数を実行する方が良いでしょうか?
jericson
(Jon Ericson)
2024 年 1 月 8 日午後 4:52
4
それは通常、私が好む解決策です。しかし、一括操作の例 からページを引っ張ってきて、RailsのUserオブジェクトにwhere句を適用する方が理にかなっているでしょう。(このような時のためにテスト環境を用意しておくと役立ちます!)
ユーザーが何人いるかによりますが、グループに追加するユーザーのボックスにコンマ区切りのリストを貼り付けることができます。それが役に立つかもしれません。
(また、バッジに基づいてユーザーをグループに追加する自動化もあります。これのベースとしてこのSQLを使用できます。ただし、Railsオプションで問題ない場合は、少し複雑になるかもしれません。)
「いいね!」 1
Crius
(Crius)
2024 年 1 月 8 日午後 4:57
6
まさにこの目的のためにステージング環境アプリを導入しました(そして、Ember 5で何が壊れるかのテストもしています )
「本業」で時間が取れれば、数日中に調査します
Crius
(Crius)
2024 年 1 月 16 日午前 11:15
8
他の人が必要とする場合のためにクエリを完了させておきます。
select ua.user_id, u.username, sum(action_type) actions, sum(case action_type when 5 then 1 else 0 end) replies from user_actions ua
join users u on u.id = ua.user_id
join topics t on target_topic_id = t.id
where ua.created_at > 'YYYY-MM-DD'::date and t.category_id = CATEGORY_ID
group by ua.user_id, u.username;
YYY-MM-DD をカットオフ日付に、CATEGORY_ID をカテゴリIDに置き換えてください。
結果には、user_id、username、actions、replies が表示されます。
Crius
(Crius)
2024 年 1 月 16 日午前 11:18
9
そのスクリプトを教えていただけますか、@JammyDodger ?
@jericson が貼り付けたリンクには見当たりません。
ユーザーリスト(約250人)を抽出できます。
「いいね!」 1
提案したオプションはUIで利用可能ですが、2番目のオプションには Discourse Automation プラグインが必要です(ただし、良いプラグインです )。
「いいね!」 1
Crius
(Crius)
2024 年 1 月 18 日午後 12:41
11
申し訳ありませんが、それがどのように役立つのか理解できません。
ユーザーID(またはユーザー名)のリストがあり、それらをグループに追加する必要があります。
現在の自動化では、私を助けることができるユースケースが見当たりません。バッジまたはカスタムフィールドに基づいてグループに追加することしかできませんが、それは追加のステップ(それらのすべてのユーザーにバッジを追加するか、ユーザーにカスタムフィールドを追加してから、私が望む特定のユーザーに値を追加する)を意味するだけです。
ループで呼び出すことができるbulk_add_user_to_group関数やadd_user_to_group関数はありませんか?
はい、その方法だと少し複雑になります。しかし、短いリストであれば、エクスプローラーの結果をCSVとしてエクスポートし、メモ帳で開いて、ユーザー追加ボックスにコピー&ペーストすることができます。
一度に250件までできるかもしれませんが、試したことはありません。もしそうでなければ、数回のバッチでカバーできるはずです。
APIを使用して、/groups/49/members.json エンドポイント(独自のgroup_idが必要です)にユーザー名/メールアドレスのリストを含むPUTリクエストを送信することでも可能になるはずです。
「いいね!」 1
Crius
(Crius)
2024 年 1 月 18 日午後 1:56
13
完璧に機能しました。UIに複数のユーザー名を追加できることを忘れていました
他の人のために、psqlクエリ結果をエクスポートするには、次を実行するだけです。
psql
\o /home/discourse/output.txt
<ここにクエリを入力>
\o
exit
これで、/home/discourse/output.txt に、画面に表示されるのと同じ形式でクエリの結果が得られます。
system
(system)
クローズされました:
2024 年 2 月 17 日午後 1:57
14
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.