Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c8ae4fc

Browse files
committedJul 14, 2024·
Refactor and add checkSpamUsername and tests
Check for Announcement username spam
1 parent 808fe21 commit c8ae4fc

File tree

2 files changed

+70
-13
lines changed

2 files changed

+70
-13
lines changed
 

‎main.go

+35-13
Original file line numberDiff line numberDiff line change
@@ -322,19 +322,7 @@ func guildMemberAdd(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
322322
return
323323
}
324324

325-
faqUsernameMatched, _ := regexp.MatchString(`(?i)FAQ`, m.User.Username)
326-
helpdeskUsernameMatched, _ := regexp.MatchString(`(?i)Helpdesk`, m.User.Username)
327-
supportUsernameMatched, _ := regexp.MatchString(`(?i)Support`, m.User.Username)
328-
adminUsernameMatched, _ := regexp.MatchString(`(?i)Admin`, m.User.Username)
329-
captchaUsernameMatched, _ := regexp.MatchString(`(?i)[CС][aа][pр]t[cс]h[aа]`, m.User.Username)
330-
giveawayUsernameMatched, _ := regexp.MatchString(`(?i)Giveaway`, m.User.Username)
331-
mee6UsernameMatched, _ := regexp.MatchString(`(?i)MEE6`, m.User.Username)
332-
managerUsernameMatched, _ := regexp.MatchString(`(?i)Manager`, m.User.Username)
333-
if (faqUsernameMatched || helpdeskUsernameMatched || supportUsernameMatched ||
334-
adminUsernameMatched || captchaUsernameMatched || giveawayUsernameMatched ||
335-
mee6UsernameMatched || managerUsernameMatched) &&
336-
len(m.Member.Roles) == 0 {
337-
go terminateMember(s, m.GuildID, m.User.ID, "Username spam")
325+
if checkSpamUsername(s, m) {
338326
return
339327
}
340328

@@ -392,3 +380,37 @@ func guildMemberAdd(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
392380
turdTimer(s, m)
393381
}()
394382
}
383+
384+
// Check if the username matches any of the given patterns
385+
func isUsernameSpam(username string, patterns []string) bool {
386+
for _, pattern := range patterns {
387+
matched, _ := regexp.MatchString(pattern, username)
388+
if matched {
389+
return true
390+
}
391+
}
392+
return false
393+
}
394+
395+
// Check for spam usernames and terminate member if conditions are met
396+
func checkSpamUsername(s *discordgo.Session, m *discordgo.GuildMemberAdd) bool {
397+
patterns := []string{
398+
`(?i)Admin`,
399+
`(?i)Announcement`,
400+
`(?i)[CС][aа][pр]t[cс]h[aа]`,
401+
`(?i)FAQ`,
402+
`(?i)Giveaway`,
403+
`(?i)Helpdesk`,
404+
`(?i)Manager`,
405+
`(?i)MEE6`,
406+
`(?i)Support`,
407+
}
408+
409+
username := m.User.Username
410+
if isUsernameSpam(username, patterns) && len(m.Roles) == 0 {
411+
go terminateMember(s, m.GuildID, m.User.ID, "Username spam")
412+
return true
413+
}
414+
415+
return false
416+
}

‎main_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,38 @@ func Test_convertIDtoCreationTime(t *testing.T) {
3333
})
3434
}
3535
}
36+
37+
func Test_isUsernameSpam(t *testing.T) {
38+
patterns := []string{
39+
`(?i)Announcement`,
40+
`(?i)FAQ`,
41+
}
42+
43+
type args struct {
44+
username string
45+
patterns []string
46+
}
47+
tests := []struct {
48+
name string
49+
args args
50+
want bool
51+
}{
52+
{
53+
name: "Ham - janedoe",
54+
args: args{"janedoe", patterns},
55+
want: false,
56+
},
57+
{
58+
name: "Spam - announcements23",
59+
args: args{"announcements23", patterns},
60+
want: true,
61+
},
62+
}
63+
for _, tt := range tests {
64+
t.Run(tt.name, func(t *testing.T) {
65+
if got := isUsernameSpam(tt.args.username, tt.args.patterns); got != tt.want {
66+
t.Errorf("isUsernameSpam() = %v, want %v", got, tt.want)
67+
}
68+
})
69+
}
70+
}

0 commit comments

Comments
 (0)
Please sign in to comment.