-
Notifications
You must be signed in to change notification settings - Fork 3
/
remove_admin.rb
58 lines (56 loc) · 2.51 KB
/
remove_admin.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class SlackSmartBot
def remove_admin(user, admin_user)
save_stats(__method__)
if Thread.current[:dest][0]=='D'
respond "This command cannot be called from a DM"
else
if Thread.current[:typem] == :on_call
channel = Thread.current[:dchannel]
elsif Thread.current[:using_channel].to_s==''
channel = Thread.current[:dest]
else
channel = Thread.current[:using_channel]
end
messages = []
admins = config.masters.dup
channels = get_channels()
channel_found = channels.detect { |c| c.id == channel }
if !channel_found.nil? and channel_found.creator.to_s != ''
creator_info = @users.select{|u| u.id == channel_found.creator or (u.key?(:enterprise_user) and u.enterprise_user.id == channel_found.creator)}[-1]
admins << creator_info.name
end
if Thread.current[:typem] == :on_bot or Thread.current[:typem] == :on_master
admins << config.admins.dup
end
if @admins_channels.key?(channel) and @admins_channels[channel].size > 0
admins << @admins_channels[channel]
end
admins.flatten!
admins.uniq!
admins.delete(nil)
if admins.include?(user.name)
admin_info = @users.select{|u| u.id == admin_user or (u.key?(:enterprise_user) and u.enterprise_user.id == admin_user)}[-1]
if creator_info.name == admin_info.name
messages << "This user created the channel and cannot be removed as an admin."
elsif config.masters.include?(admin_info.name) or config.masters.include?(admin_user)
messages << "Master admins cannot be removed as admins of this channel."
elsif config.admins.include?(admin_info.name) or config.admins.include?(admin_user)
messages << "This user is a defaulted admin for this channel and cannot be removed using this command."
elsif !admins.include?(admin_info.name)
messages << "This user is not an admin of this channel."
else
@admins_channels[channel] ||= []
@admins_channels[channel].delete(admin_info.name)
update_admins_channels()
messages << "The user is not an admin of this channel from now on."
admins.delete(admin_info.name)
end
messages << "*Admins*: <@#{admins.join('>, <@')}>"
else
messages << "Only the creator of the channel, Master admins or admins can remove an admin of this channel."
messages << "*Admins*: <@#{admins.join('>, <@')}>"
end
respond messages.join("\n")
end
end
end