Discourse. Users, Groups, Categories

Ilya Zykin
2 min readJan 22, 2025

--

Notes about getting information about users, groups, categories etc. right after an initial installation

# All groups
Group.pluck(:name)

[
"everyone",
"trust_level_2",
"trust_level_3",
"trust_level_4",
"admins",
"staff",
"moderators",
"trust_level_0",
"trust_level_1"
]
# Groups visibility
Group.visibility_levels
=> {:public=>0, :logged_on_users=>1, :members=>2, :staff=>3, :owners=>4}

# How much users in a group
Group.all.each_with_object({}) do |group, result|
result[group.name] = group.users.count
end

{
"everyone"=>0,
"trust_level_2"=>2,
"trust_level_3"=>2,
"trust_level_4"=>2,
"admins"=>3,
"staff"=>3,
"moderators"=>2,
"trust_level_0"=>4,
"trust_level_1"=>4
}
# How much users in the system
User.count

# Last user
User.last.email

=> "admin@test.com"
# User's groups
User.last.groups.pluck(:name)
=> ["trust_level_0", "trust_level_1"]

User.last.trust_level
=> 1

User.last.admin?
=> false

User.last.moderator?
=> false

User.last.active?
=> true

User.last.suspended?
=> false

User.last.last_seen_at
=> Wed, 22 Jan 2025 12:57:39.190562000 UTC +00:00

# access to categories
categories = User.last.groups.map(&:categories).flatten.uniq
categories.map(&:name)
=> []

Trust Levels in Discourse:

  • Trust Level 0 (New User):
    Newly registered. Limited actions (e.g., restricted links/images). Cannot send private messages.
  • Trust Level 1 (Basic User):
    Access to basic features: create topics, send private messages, upload images and attachments.
  • Trust Level 2 (Member):
    Active user. Can invite others to topics, ignore users, and mark topics as visited.
  • Trust Level 3 (Regular):
    Highly active. Can edit topic titles, move topics between categories, and temporarily hide posts.
  • Trust Level 4 (Leader):
    Highest trust level, manually assigned. Almost full moderation rights: edit any post, close/open topics.

Categories

Category.count
=> 4

Category.pluck(:name)
=> ["Site Feedback", "Uncategorized", "General", "Staff"]
Category.all.each do |category|
puts "Category: #{category.name}, Topics: #{category.topic_count}"
end

Category: Site Feedback, Topics: 0
Category: Uncategorized, Topics: 0
Category: General, Topics: 1
Category: Staff, Topics: 2

Now I/You know about basic Models in Discourse.
Happy coding!

--

--

Ilya Zykin
Ilya Zykin

Written by Ilya Zykin

IT coach. React and Rails enthusiast. Passionate programmer, caring husband and pancake baker on Sundays. School teacher of computer studies in the past.

No responses yet