Commit MetaInfo

Revision9f1a9414ec5c8304fba93218848a07a295c4b384 (tree)
Zeit2021-06-09 10:28:05
AutorRemilia Scarlet <alexa@part...>
CommiterRemilia Scarlet

Log Message

Add kickRegex config field, and implement auto-kicking based on
usernames

Ändern Zusammenfassung

Diff

diff -r 1453a424a136 -r 9f1a9414ec5c src/config/config.cr
--- a/src/config/config.cr Tue May 25 21:53:05 2021 -0600
+++ b/src/config/config.cr Tue Jun 08 19:28:05 2021 -0600
@@ -101,6 +101,10 @@
101101 # The database configuration section.
102102 property dbconfig : DBConfig
103103
104+ # An array of strings, treated as regular expressions, of
105+ # usernames to immediately kick.
106+ property kickRegex : Array(String) = [] of String
107+
104108 # Returns the known, configured servers ("guilds").
105109 @[YAML::Field(ignore: true)]
106110 @servers : Hash(UInt64, ServerConfig) = {} of UInt64 => ServerConfig
@@ -165,8 +169,12 @@
165169
166170 str << "RSS Frequency (minutes): #{rssCheckFrequency}\n"
167171
172+ str << "Kick Regexes:\n"
173+ kickRegex.each do |rgx|
174+ str << " * #{rgx}\n"
175+ end
176+
168177 str << "Servers:\n"
169-
170178 servers.each do |_, server|
171179 server.dump(str)
172180 end
diff -r 1453a424a136 -r 9f1a9414ec5c src/monika.cr
--- a/src/monika.cr Tue May 25 21:53:05 2021 -0600
+++ b/src/monika.cr Tue Jun 08 19:28:05 2021 -0600
@@ -60,6 +60,7 @@
6060 @subsystems = {} of String => Subsystem
6161 @dbConn : DB::Database
6262 @deinitCalled = false
63+ @compiledKickRegexes = [] of Regex
6364
6465 # The loaded subsystems.
6566 getter subsystems
@@ -290,6 +291,20 @@
290291
291292 baseClient.on_guild_member_add do |payload|
292293 begin
294+ if @compiledKickRegexes.empty?
295+ Monika.config.kickRegex.each do |rgx|
296+ @compiledKickRegexes << Regex.new(rgx, Regex::Options::IGNORE_CASE)
297+ end
298+ end
299+
300+ if @compiledKickRegexes.size > 0 && @compiledKickRegexes.any? &.match(payload.user.username)
301+ sleep 1.second
302+ Monika.log.log("Kicking #{payload.user}, match found in kick regexes")
303+ Monika.instance.baseClient.remove_guild_member(payload.guild_id, payload.user.id,
304+ "Kicking #{payload.user}, match found in kick regexes")
305+ next
306+ end
307+
293308 Monika.history.handleUserJoin(payload)
294309 rescue err : Monikabot::History::NoGuildConfigError
295310 Monika.log.warn("#{err}")
Show on old repository browser