vrobot4/source/modules/dtl.rb

84 lines
2.3 KiB
Ruby
Raw Normal View History

2019-02-23 16:18:39 -08:00
class Mod_DTL < Vrobot4::Module::Module
def self.type() "DTL" end
Vrobot4::Module.add_module_type self, server: "Discord"
def initialize info
super
register :c_setnotify, "setnotify", "Adds you to a notification group."
register :c_unsetnotify, "unsetnotify", "Removes you from a notification group."
register :c_listnotify, "listnotify", "Lists available notification groups."
register :c_notify, "notify", "Notifies a notification group."
2019-11-08 09:19:23 -08:00
@member_id = @info[:member_id].resolve_id
@group_ids = @info[:group_ids].map! do |ids|
{not: ids[:not].resolve_id,
dev: ids[:dev].resolve_id}
end
2019-02-23 16:18:39 -08:00
end
def ensure_role m
2019-11-08 09:19:23 -08:00
if m.chan.real.server
2019-02-23 16:18:39 -08:00
m.user.real.add_role @member_id unless m.user.real.role? @member_id
end
end
2019-11-08 09:19:23 -08:00
def get_notification_roles m, argv
2019-02-23 16:18:39 -08:00
roles = m.chan.real.server.roles
2019-11-08 09:19:23 -08:00
role = roles.find do |r| r.name.casecmp(argv) == 0 end
ids = @group_ids.detect do |ids| role.id == ids[:not] end if role
unless ids
2019-02-23 16:18:39 -08:00
raise ArgumentError, "Invalid notification group, use `.listnotify` for a list of available groups."
end
2019-11-08 09:19:23 -08:00
ids
2019-02-23 16:18:39 -08:00
end
def on_message m
ensure_role m
super m
end
def on_command m, cnam, argv
ensure_role m
super m, cnam, argv
end
def c_setnotify m, argv
ensure_role m
2019-11-08 09:19:23 -08:00
m.user.real.add_role get_notification_roles(m, argv)[:not]
2019-02-23 16:18:39 -08:00
m.reply "Successfully added you to the notification group."
end
def c_unsetnotify m, argv
2019-11-08 09:19:23 -08:00
m.user.real.remove_role get_notification_roles(m, argv)[:not]
2019-02-23 16:18:39 -08:00
m.reply "Successfully removed you from the notification group."
end
def c_listnotify m, argv
text = ""
2019-11-08 09:23:43 -08:00
for ids in @group_ids do
text << m.chan.real.server.role(ids[:not]).name + ?\n
2019-02-23 16:18:39 -08:00
end
m.reply text
end
def c_notify m, argv
2019-11-08 09:19:23 -08:00
argv = argv.split ?,, 2
ids = get_notification_roles m, argv[0]
if m.user.real.role? ids[:dev]
2019-11-08 09:31:23 -08:00
notif = m.chan.real.server.role ids[:not]
notif.mentionable = true
2019-02-23 16:18:39 -08:00
if argv[1]
2019-11-08 09:31:23 -08:00
m.reply "#{notif.mention} - #{argv[1].strip}"
2019-02-23 16:18:39 -08:00
else
2019-11-08 09:31:23 -08:00
m.reply notif.mention
2019-02-23 16:18:39 -08:00
end
notif.mentionable = false
2019-02-23 16:18:39 -08:00
else
m.reply "You don't have permission for that."
end
end
end
## EOF