Skip to content

Commit

Permalink
Added triggerdetails, fixed a bug with temp role deletion and Squads
Browse files Browse the repository at this point in the history
  • Loading branch information
CrescentKohana committed Mar 4, 2021
1 parent f558dee commit 595c9ca
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 12 deletions.
1 change: 1 addition & 0 deletions data/persistent/bot_state.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
"TriggerMod",
"TriggerDel",
"TriggerSearch",
"TriggerDetails",
"Triggers",
"Doubles",
"Triples",
Expand Down
16 changes: 5 additions & 11 deletions lib/async/periodical_temp_role_deletion.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,16 @@ module PeriodicalTempRoleDeletion
next if role_db.nil? || !role_db

time_now = Time.now.to_i
to_be_removed = {}
role_db.each do |_k, v|
user_id = v['user'].to_i
role_id = v['role'].to_i

if time_now >= v['time'].to_i + (v['duration'] * 24 * 60 * 60)
server_id = v['server'].to_i
next unless time_now >= v['time'].to_i + (v['duration'] * 24 * 60 * 60)
next if v.nil?

to_be_removed[[user_id, role_id]] = server_id unless (to_be_removed[{ user_id => role_id }]).zero?
else
to_be_removed[[user_id, role_id]] = 0
end
end

to_be_removed.each do |k, v|
Discordrb::API::Server.remove_member_role("Bot #{AUTH.bot_token}", v, k[0], k[1]) unless v.zero?
Discordrb::API::Server.remove_member_role(
"Bot #{AUTH.bot_token}", v['server'].to_i, user_id, role_id
)
end
sleep(60)
end
Expand Down
43 changes: 43 additions & 0 deletions lib/commands/triggers/trigger_details.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
module TohsakaBot
module Commands
module TriggerDetails
extend Discordrb::Commands::CommandContainer
command(:triggerdetails,
aliases: %i[triggerdetail triggerdetail showtrigger triggerinfo infotrigger tinfo],
description: 'Shows details about triggers.',
usage: "Use 'triggerdetails <id>",
min_args: 1,
require_register: true,
enabled_in_pm: false) do |event, id|

unless Integer(id, exception: false).nil?
trigger = TohsakaBot.db[:triggers].where(id: id.to_i).single_record!
unless trigger.nil?
mode = case trigger[:mode]
when 2
"Regex"
when 1
"Any"
else
"Exact"
end

event.channel.send_embed do |e|
e.colour = 0xA82727
e.add_field(name: "Phrase <ID: #{id}>", value: "#{trigger[:phrase]}")
e.add_field(name: 'Reply', value: trigger[:reply].to_s) unless trigger[:reply].empty?
e.add_field(name: 'File', value: "[Link](https://rin.luukuton.fi/td/#{trigger[:file]})") unless trigger[:file].empty?
e.add_field(name: 'Mode / Chance', value: "#{mode} / #{trigger[:chance]} %")
e.add_field(name: 'Occurences + Calls', value: "#{trigger[:occurences]} + #{trigger[:calls]}")

e.footer = Discordrb::Webhooks::EmbedFooter.new(text: "Last trigger: #{trigger[:last_triggered]}", icon_url: '')
end
break
end
end

event.respond("Specified trigger wasn't found.")
end
end
end
end
17 changes: 17 additions & 0 deletions lib/events/other/trigger_event.rb
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,23 @@ module TriggerEvent
event.channel.send_file(File.open("data/triggers/#{file}"))
end

# Incrementing trigger stats
if sure_trigger
TohsakaBot.db.transaction do
TohsakaBot.db[:triggers].where(id: chosen_trigger[:id]).update(
occurences: chosen_trigger[:occurences] + 1,
last_triggered: Time.now
)
end
else
TohsakaBot.db.transaction do
TohsakaBot.db[:triggers].where(id: chosen_trigger[:id]).update(
calls: chosen_trigger[:calls] + 1 ,
last_triggered: Time.now
)
end
end

# A way to remove the trigger response.
# Only the one, whose message got triggered, is able to delete the response.
# Threading is needed here as otherwise the await! would block any other triggers.
Expand Down
2 changes: 1 addition & 1 deletion lib/events/squads/squads.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ module Squads
"Bot #{AUTH.bot_token}", event.channel.id, event.message.id, "✅", false, false
)).reject { |m| m["bot"] || m["id"].to_i == author_id }.map { |m| "<@!#{m["id"]}>" }

reaction_count = reactions[0]["✅"].to_i - 1
reaction_count = reactions[0]["✅"].to_i
reaction_count -= 1 if members.include? "<@!#{author_id}>"
next unless role_mentions.key?(roles[role]["role_id"]) && reaction_count >= roles[role]["group_size"]

Expand Down
2 changes: 2 additions & 0 deletions lib/events/squads/squads_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ module SquadsHelper
extend Discordrb::EventContainer
roles = JSON.parse(File.read('data/persistent/squads.json')).map { |r| /.*<@&#{r[1]["role_id"]}>.*/ }
message(content: roles) do |event|
next if event.channel.pm?

event.message.create_reaction('✅')
event.message.create_reaction('❌')
end
Expand Down

0 comments on commit 595c9ca

Please sign in to comment.