commit c44c39e73709f8e50345eb384459052cda88838d
parent 994fd6e6f0fbe16f00d654200634404e72c73c15
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sat, 7 Jan 2023 16:10:12 -0800
add /ks & /kks
Diffstat:
3 files changed, 40 insertions(+), 6 deletions(-)
diff --git a/pkg/database/utils/utils.go b/pkg/database/utils/utils.go
@@ -55,8 +55,10 @@ func DoParseUserID(v string) (out database.UserID) {
return
}
-func Kick(kicked, kickedBy database.User, purge bool) error {
- silent := kicked.IsHellbanned
+func Kick(kicked, kickedBy database.User, purge, silent bool) error {
+ if kicked.IsHellbanned {
+ silent = true
+ }
return kick(kicked, kickedBy, silent, purge)
}
diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go
@@ -47,6 +47,8 @@ var inboxRgx = regexp.MustCompile(`^/inbox ` + optAtGUser + `(\s-e)?\s(?s:(.*))`
var profileRgx = regexp.MustCompile(`^/p ` + optAtGUserOr0)
var kickRgx = regexp.MustCompile(`^/(?:kick|k) ` + optAtGUser)
var kickKeepRgx = regexp.MustCompile(`^/(?:kk) ` + optAtGUser)
+var kickSilentRgx = regexp.MustCompile(`^/(?:ks) ` + optAtGUser)
+var kickKeepSilentRgx = regexp.MustCompile(`^/(?:kks) ` + optAtGUser)
var rtutoRgx = regexp.MustCompile(`^/(?:rtuto) ` + optAtGUser)
var logoutRgx = regexp.MustCompile(`^/(?:logout) ` + optAtGUser)
var forceCaptchaRgx = regexp.MustCompile(`^/(?:captcha) ` + optAtGUser)
diff --git a/pkg/web/handlers/api/v1/slashInterceptor.go b/pkg/web/handlers/api/v1/slashInterceptor.go
@@ -109,6 +109,8 @@ func handleModeratorCmd(c *Command) (handled bool) {
handleListModeratorsCmd(c) ||
handleKickCmd(c) ||
handleKickKeepCmd(c) ||
+ handleKickSilentCmd(c) ||
+ handleKickKeepSilentCmd(c) ||
handleUnkickCmd(c) ||
handleLogoutCmd(c) ||
handleForceCaptchaCmd(c) ||
@@ -168,7 +170,7 @@ func handleListModeratorsCmd(c *Command) (handled bool) {
func handleKickCmd(c *Command) (handled bool) {
if m := kickRgx.FindStringSubmatch(c.message); len(m) == 2 {
username := m[1]
- if err := kickCmd(c, username, true); err != nil {
+ if err := kickCmd(c, username, true, false); err != nil {
c.err = err
return true
}
@@ -182,7 +184,7 @@ func handleKickCmd(c *Command) (handled bool) {
func handleKickKeepCmd(c *Command) (handled bool) {
if m := kickKeepRgx.FindStringSubmatch(c.message); len(m) == 2 {
username := m[1]
- if err := kickCmd(c, username, false); err != nil {
+ if err := kickCmd(c, username, false, false); err != nil {
c.err = err
return true
}
@@ -192,12 +194,40 @@ func handleKickKeepCmd(c *Command) (handled bool) {
return
}
-func kickCmd(c *Command, username string, purge bool) error {
+// Kick a user, no system message in chat
+func handleKickSilentCmd(c *Command) (handled bool) {
+ if m := kickSilentRgx.FindStringSubmatch(c.message); len(m) == 2 {
+ username := m[1]
+ if err := kickCmd(c, username, true, true); err != nil {
+ c.err = err
+ return true
+ }
+ c.err = ErrRedirect
+ return true
+ }
+ return
+}
+
+// Kick a user, keep the messages, no system message in chat
+func handleKickKeepSilentCmd(c *Command) (handled bool) {
+ if m := kickKeepSilentRgx.FindStringSubmatch(c.message); len(m) == 2 {
+ username := m[1]
+ if err := kickCmd(c, username, false, true); err != nil {
+ c.err = err
+ return true
+ }
+ c.err = ErrRedirect
+ return true
+ }
+ return
+}
+
+func kickCmd(c *Command, username string, purge, silent bool) error {
user, err := database.GetUserByUsername(username)
if err != nil {
return ErrUsernameNotFound
}
- return dutils.Kick(user, *c.authUser, purge)
+ return dutils.Kick(user, *c.authUser, purge, silent)
}
var ErrUsernameNotFound = errors.New("username not found")