dkforest

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

commit f8e70a2dff63fd5a84aa6b0ccae007f31f672f3b
parent 60d715d986be9c94ce30949f54f90871068160a7
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Wed, 19 Feb 2025 14:09:25 -0800

cleanup

Diffstat:
Mpkg/web/handlers/interceptors/command/command.go | 5+++--
Mpkg/web/handlers/interceptors/msgInterceptor.go | 1+
Mpkg/web/handlers/interceptors/slashInterceptor.go | 55++++++++++++++++++++-----------------------------------
3 files changed, 24 insertions(+), 37 deletions(-)

diff --git a/pkg/web/handlers/interceptors/command/command.go b/pkg/web/handlers/interceptors/command/command.go @@ -132,8 +132,9 @@ func (c *Command) zeroProcMsgRoomToUser(rawMsg, roomKey string, roomID database. func (c *Command) ZeroMsg(msg string) { c.zeroRawMsg(c.AuthUser, msg, msg) } -func (c *Command) ZeroMsgToUser(AuthUser *database.User, msg string) { - c.zeroRawMsg(AuthUser, msg, msg) + +func (c *Command) ZeroMsgToUser(toUser *database.User, msg string) { + c.zeroRawMsg(toUser, msg, msg) } func (c *Command) ZeroSysMsgTo(user2 *database.User, msg string) { diff --git a/pkg/web/handlers/interceptors/msgInterceptor.go b/pkg/web/handlers/interceptors/msgInterceptor.go @@ -52,6 +52,7 @@ var forceCaptchaRgx = regexp.MustCompile(`^/(?:captcha) ` + optAtGUser) var unkickRgx = regexp.MustCompile(`^/(?:unkick|uk) ` + optAtGUser) var hellbanRgx = regexp.MustCompile(`^/(?:hellban|hb) ` + optAtGUser) var unhellbanRgx = regexp.MustCompile(`^/(?:unhellban|uhb) ` + optAtGUser) +var inviteRgx = regexp.MustCompile(`^/invite ` + optAtGUser + ` (\d+)$`) var randRgx = regexp.MustCompile(`^/rand (-?\d+) (-?\d+)$`) var tokenRgx = regexp.MustCompile(`^/token (\d{1,2})$`) var snippetRgx = regexp.MustCompile(`!\w{1,20}`) diff --git a/pkg/web/handlers/interceptors/slashInterceptor.go b/pkg/web/handlers/interceptors/slashInterceptor.go @@ -21,7 +21,6 @@ import ( "html" "os" "path/filepath" - "regexp" "sort" "strconv" "strings" @@ -81,7 +80,6 @@ var userCmdsMap = map[string]CmdHandler{ "/sha256": handleSha256Cmd, "/sha512": handleSha512Cmd, "/dice": handleDiceCmd, - "/invite": handleInviteCmd, "/rand": handleRandCmd, "/choice": handleChoiceCmd, "/memes": handleListMemes, @@ -147,6 +145,7 @@ var moderatorCmdsMap = map[string]CmdHandler{ "/hellban": handleHellbanCmd, "/unhellban": handleUnhellbanCmd, "/uhb": handleUnhellbanCmd, + "/invite": handleInviteCmd, } var adminCmdsMap = map[string]CmdHandler{ @@ -538,42 +537,28 @@ func handleDiceCmd(c *command.Command) (handled bool) { } func handleInviteCmd(c *command.Command) (handled bool) { - - if !c.AuthUser.IsAdmin || !c.AuthUser.IsModerator() { - return - } - - if strings.HasPrefix(c.Message, "/invite") { - text := c.Message - getUserName := regexp.MustCompile(`@\w+`) - matchUserName := getUserName.FindAllString(text, -1) - user := matchUserName[0] - RemoveAtFromUserName := strings.ReplaceAll(user, "@", "") - sendTouser, _ := c.DB.GetUserByUsername(database.Username(RemoveAtFromUserName)) - - getNumberOfInvites := regexp.MustCompile(`@\w+\s(\d+)`) - match := getNumberOfInvites.FindStringSubmatch(text) - numberOfInvites := 0 - number, err := strconv.Atoi(match[1]) - if err == nil { - numberOfInvites = number - } + if m := inviteRgx.FindStringSubmatch(c.Message); len(m) == 3 { + username := database.Username(m[1]) + nbInvites := utils.Clamp(utils.DoParseInt(m[2]), 1, 10) + sendToUser, err := c.DB.GetUserByUsername(username) if err != nil { - fmt.Println("error") - numberOfInvites = 1 + c.Err = ErrUsernameNotFound + return true } - fmt.Println(numberOfInvites) - for i := 0; i < numberOfInvites; i++ { - inviteToken, _ := c.DB.CreateInvitation(c.AuthUser.ID) - msg := fmt.Sprintf(`your Invite token from @%s . "<span style="color: Aqua;">%s</span>"`, c.AuthUser.Username, inviteToken.Token) - msg, _ = dutils.ColorifyTaggedUsers(msg, c.DB.GetUsersByUsername) - - go func() { - time.Sleep(time.Second) - c.ZeroMsgToUser(&sendTouser, msg) - - }() + tokens := make([]string, 0) + for i := 0; i < nbInvites; i++ { + if inviteToken, err := c.DB.CreateInvitation(c.AuthUser.ID); err == nil { + tokens = append(tokens, fmt.Sprintf(`<span style="color: Aqua; user-select: all; -webkit-user-select: all;">%s</span>`, inviteToken.Token)) + } } + go func() { + time.Sleep(time.Second) + tokensStr := strings.Join(tokens, "<br />") + msg := fmt.Sprintf(`invitation tokens from @%s:<br />%s`, c.AuthUser.Username, tokensStr) + msg, _ = dutils.ColorifyTaggedUsers(msg, c.DB.GetUsersByUsername) + c.ZeroMsgToUser(&sendToUser, msg) + }() + c.Err = command.NewErrSuccess(fmt.Sprintf("%d tokens sent", len(tokens))) return true } return