dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit c44c39e73709f8e50345eb384459052cda88838d
parent 994fd6e6f0fbe16f00d654200634404e72c73c15
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sat,  7 Jan 2023 16:10:12 -0800

add /ks & /kks

Diffstat:
Mpkg/database/utils/utils.go | 6++++--
Mpkg/web/handlers/api/v1/handlers.go | 2++
Mpkg/web/handlers/api/v1/slashInterceptor.go | 38++++++++++++++++++++++++++++++++++----
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")