Module: TurboChat::Moderation::MemberActions

Included in:
TurboChat::Moderation
Defined in:
lib/turbo_chat/moderation/member_actions.rb

Instance Method Summary collapse

Instance Method Details

#ban_member!(actor:, membership:) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/turbo_chat/moderation/member_actions.rb', line 52

def ban_member!(actor:, membership:)
  update_member!(
    actor: actor,
    membership: membership,
    action: :can_ban_member?,
    attributes: { removed_at: Time.current, muted: false, timed_out_until: nil },
    event_name: "turbo_chat.moderation.member_banned",
    system_event: :banned
  )
end

#clear_timeout!(actor:, membership:) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/turbo_chat/moderation/member_actions.rb', line 41

def clear_timeout!(actor:, membership:)
  update_member!(
    actor: actor,
    membership: membership,
    action: :can_timeout_member?,
    attributes: { timed_out_until: nil },
    event_name: "turbo_chat.moderation.member_timeout_cleared",
    system_event: :timeout_cleared
  )
end

#mute_member!(actor:, membership:) ⇒ Object



3
4
5
6
7
8
9
10
11
12
# File 'lib/turbo_chat/moderation/member_actions.rb', line 3

def mute_member!(actor:, membership:)
  update_member!(
    actor: actor,
    membership: membership,
    action: :can_mute_member?,
    attributes: { muted: true },
    event_name: "turbo_chat.moderation.member_muted",
    system_event: :muted
  )
end

#timeout_member!(actor:, membership:, until_time:) ⇒ Object

Raises:



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/turbo_chat/moderation/member_actions.rb', line 25

def timeout_member!(actor:, membership:, until_time:)
  authorize_member_action!(actor: actor, membership: membership, action: :can_timeout_member?)
  raise InvalidActionError, "timeout must be in the future" if until_time.nil? || until_time <= Time.current

  membership.update!(timed_out_until: until_time)
  emit_moderation_event(
    "turbo_chat.moderation.member_timed_out",
    actor: actor,
    membership: membership,
    chat: membership.chat,
    extra: { timed_out_until: membership.timed_out_until }
  )
  create_membership_system_message(actor: actor, membership: membership, event: :timed_out)
  membership
end

#unmute_member!(actor:, membership:) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/turbo_chat/moderation/member_actions.rb', line 14

def unmute_member!(actor:, membership:)
  update_member!(
    actor: actor,
    membership: membership,
    action: :can_mute_member?,
    attributes: { muted: false },
    event_name: "turbo_chat.moderation.member_unmuted",
    system_event: :unmuted
  )
end