commit e2764bafae6e7e0c7ba929a9108392b29c3c72a2
parent 135e76e063a7e4b1443bea39d4b131864b47d59f
Author: Fox <LightFox@home.com>
Date: Wed, 19 Feb 2025 11:14:23 -0800
Your commit message
Diffstat:
7 files changed, 87 insertions(+), 47 deletions(-)
diff --git a/pkg/database/tableChatMessages.go b/pkg/database/tableChatMessages.go
@@ -559,14 +559,13 @@ AND room_id = ?
}
func makeMsg(raw, txt string, roomID RoomID, userID UserID) ChatMessage {
- msg := ChatMessage{
+ return ChatMessage{
UUID: uuid.New().String(),
Message: txt,
RawMessage: raw,
RoomID: roomID,
UserID: userID,
}
- return msg
}
func (d *DkfDB) CreateMsg(raw, txt, roomKey string, roomID RoomID, userID UserID, toUserID *UserID, hellbanMsg bool) (out ChatMessage, err error) {
@@ -574,7 +573,7 @@ func (d *DkfDB) CreateMsg(raw, txt, roomKey string, roomID RoomID, userID UserID
}
func (d *DkfDB) CreateSysMsg(raw, txt, roomKey string, roomID RoomID, userID UserID) error {
- return utils.Second(d.createMsg(raw, txt, roomKey, roomID, userID, nil, false, true, false))
+ return d.CreateSysMsgPM(raw, txt, roomKey, roomID, userID, nil, false)
}
func (d *DkfDB) CreateSysMsgPM(raw, txt, roomKey string, roomID RoomID, userID UserID, toUserID *UserID, skipNotify bool) error {
@@ -582,35 +581,28 @@ func (d *DkfDB) CreateSysMsgPM(raw, txt, roomKey string, roomID RoomID, userID U
}
func (d *DkfDB) CreateKickMsg(kickedUser, kickedByUser User) {
- // Display kick message
- styledUsername := fmt.Sprintf(`<span %s>%s</span>`, kickedUser.GenerateChatStyle(), kickedUser.Username)
- rawTxt := fmt.Sprintf("%s has been kicked. (%s)", kickedUser.Username, kickedByUser.Username)
- txt := fmt.Sprintf("%s has been kicked. (%s)", styledUsername, kickedByUser.Username)
- utils.LogErr(d.CreateSysMsg(rawTxt, txt, "", config.GeneralRoomID, kickedByUser.ID))
+ d.createKickMsg(kickedUser, kickedByUser, "%s has been kicked. (%s)")
}
func (d *DkfDB) CreateUnkickMsg(kickedUser, kickedByUser User) {
- // Display unkick message
+ d.createKickMsg(kickedUser, kickedByUser, "%s has been unkicked. (%s)")
+}
+
+func (d *DkfDB) createKickMsg(kickedUser, kickedByUser User, format string) {
styledUsername := fmt.Sprintf(`<span %s>%s</span>`, kickedUser.GenerateChatStyle(), kickedUser.Username)
- rawTxt := fmt.Sprintf("%s has been unkicked. (%s)", kickedUser.Username, kickedByUser.Username)
- txt := fmt.Sprintf("%s has been unkicked. (%s)", styledUsername, kickedByUser.Username)
+ rawTxt := fmt.Sprintf(format, kickedUser.Username, kickedByUser.Username)
+ txt := fmt.Sprintf(format, styledUsername, kickedByUser.Username)
utils.LogErr(d.CreateSysMsg(rawTxt, txt, "", config.GeneralRoomID, kickedByUser.ID))
}
func (d *DkfDB) createMsg(raw, txt, roomKey string, roomID RoomID, userID UserID, toUserID *UserID, hellbanMsg, system, skipNotify bool) (out ChatMessage, err error) {
- if roomKey != "" {
- var err error
- txt, raw, err = encryptMessages(txt, raw, roomKey)
- if err != nil {
- return out, err
- }
+ txt, raw, err = encryptWithRoomKey(txt, raw, roomKey)
+ if err != nil {
+ return
}
-
out = makeMsg(raw, txt, roomID, userID)
out.SkipNotify = skipNotify
- if toUserID != nil {
- out.ToUserID = toUserID
- }
+ out.ToUserID = toUserID
out.IsHellbanned = hellbanMsg
out.System = system
err = d.db.Create(&out).Error
@@ -628,12 +620,10 @@ func (d *DkfDB) CreateOrEditMessage(
groupID *GroupID,
hellbanMsg, modMsg, systemMsg bool) (int64, error) {
- if roomKey != "" {
- var err error
- message, raw, err = encryptMessages(message, raw, roomKey)
- if err != nil {
- return 0, err
- }
+ var err error
+ message, raw, err = encryptWithRoomKey(message, raw, roomKey)
+ if err != nil {
+ return 0, err
}
typ := CreateMsg
@@ -657,8 +647,16 @@ func (d *DkfDB) CreateOrEditMessage(
editMsg.UploadID = &upload.ID
}
}
+
+ addFullscreenLinkToCodeBlocks(editMsg)
+
editMsg.DoSave(d)
+ MsgPubSub.Pub("room_"+roomID.String(), ChatMessageType{Typ: typ, Msg: *editMsg})
+ return editMsg.ID, nil
+}
+
+func addFullscreenLinkToCodeBlocks(editMsg *ChatMessage) {
i := 0
rgx := regexp.MustCompile(`</pre>`)
editMsg.Message = rgx.ReplaceAllStringFunc(editMsg.Message, func(s string) string {
@@ -666,12 +664,13 @@ func (d *DkfDB) CreateOrEditMessage(
return fmt.Sprintf(`</pre><a href="/chat-code/%s/%d" title="Open in fullscreen" rel="noopener noreferrer" target="_blank" class=fullscreen>⛶</a>`,
editMsg.UUID, i-1)
})
- if i > 0 {
- editMsg.DoSave(d)
- }
+}
- MsgPubSub.Pub("room_"+roomID.String(), ChatMessageType{Typ: typ, Msg: *editMsg})
- return editMsg.ID, nil
+func encryptWithRoomKey(txt, raw string, roomKey string) (string, string, error) {
+ if roomKey == "" {
+ return txt, raw, nil
+ }
+ return encryptMessages(txt, raw, roomKey)
}
type PubSubMessageType int
@@ -711,7 +710,7 @@ func encryptMessages(html, origMessage, roomKey string) (string, string, error)
if err != nil {
return "", "", err
}
- return html, origMessage, err
+ return html, origMessage, nil
}
func encryptMessage(roomKey, msg string) (string, error) {
diff --git a/pkg/database/utils/utils.go b/pkg/database/utils/utils.go
@@ -13,9 +13,7 @@ import (
func GetZeroUser(db *database.DkfDB) database.User {
zeroUser, err := db.GetUserByUsername(config.NullUsername)
- if err != nil {
- logrus.Error(err)
- }
+ utils.LogErr(err)
return zeroUser
}
diff --git a/pkg/web/handlers/interceptors/battleship.go b/pkg/web/handlers/interceptors/battleship.go
@@ -2,8 +2,8 @@ package interceptors
import (
"bytes"
- "dkforest/pkg/config"
"dkforest/pkg/database"
+ dutils "dkforest/pkg/database/utils"
"dkforest/pkg/utils"
"dkforest/pkg/web/handlers/interceptors/command"
"encoding/base64"
@@ -220,7 +220,7 @@ type Battleship struct {
}
func NewBattleship(db *database.DkfDB) *Battleship {
- zeroUser, _ := db.GetUserByUsername(config.NullUsername)
+ zeroUser := dutils.GetZeroUser(db)
b := &Battleship{db: db, zeroID: zeroUser.ID}
b.games = make(map[string]*BSGame)
diff --git a/pkg/web/handlers/interceptors/chess.go b/pkg/web/handlers/interceptors/chess.go
@@ -133,7 +133,7 @@ type Chess struct {
}
func NewChess(db *database.DkfDB) *Chess {
- zeroUser, _ := db.GetUserByUsername(config.NullUsername)
+ zeroUser := dutils.GetZeroUser(db)
c := &Chess{db: db, zeroID: zeroUser.ID}
c.games = make(map[string]*ChessGame)
diff --git a/pkg/web/handlers/interceptors/slashInterceptor.go b/pkg/web/handlers/interceptors/slashInterceptor.go
@@ -21,6 +21,7 @@ import (
"html"
"os"
"path/filepath"
+ "regexp"
"sort"
"strconv"
"strings"
@@ -80,6 +81,7 @@ var userCmdsMap = map[string]CmdHandler{
"/sha256": handleSha256Cmd,
"/sha512": handleSha512Cmd,
"/dice": handleDiceCmd,
+ "/invite": handleInviteCmd,
"/rand": handleRandCmd,
"/choice": handleChoiceCmd,
"/memes": handleListMemes,
@@ -535,6 +537,48 @@ func handleDiceCmd(c *command.Command) (handled bool) {
return
}
+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 err != nil {
+ fmt.Println("error")
+ numberOfInvites = 1
+ }
+ 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)
+
+ }()
+ }
+ return true
+ }
+ return
+}
+
func handleRandCmd(c *command.Command) (handled bool) {
if strings.HasPrefix(c.Message, "/rand") {
minV := 1
diff --git a/pkg/web/handlers/interceptors/werewolf.go b/pkg/web/handlers/interceptors/werewolf.go
@@ -3,7 +3,6 @@ package interceptors
import (
"bytes"
"context"
- "dkforest/pkg/config"
"dkforest/pkg/database"
dutils "dkforest/pkg/database/utils"
"dkforest/pkg/hashset"
@@ -683,7 +682,7 @@ func NewWerewolf(db *database.DkfDB) *Werewolf {
logrus.Error("#werewolf room not found")
return nil
}
- zeroUser, _ := db.GetUserByUsername(config.NullUsername)
+ zeroUser := dutils.GetZeroUser(db)
_ = db.DeleteChatRoomGroups(room.ID)
werewolfGroup, _ := db.CreateChatRoomGroup(room.ID, "werewolf", "#ffffff")
werewolfGroup.Locked = true
diff --git a/pkg/web/handlers/signup.go b/pkg/web/handlers/signup.go
@@ -6,6 +6,7 @@ import (
"dkforest/pkg/captcha"
"dkforest/pkg/config"
"dkforest/pkg/database"
+ dutils "dkforest/pkg/database/utils"
"dkforest/pkg/utils"
hutils "dkforest/pkg/web/handlers/utils"
"encoding/json"
@@ -181,13 +182,12 @@ func signupHandler(c echo.Context) error {
settings.SignupEnabled = false
settings.DoSave(db)
config.SignupEnabled.SetFalse()
- if userNull, err := db.GetUserByUsername(config.NullUsername); err == nil {
- db.NewAudit(userNull, fmt.Sprintf("auto turn off signup"))
+ userNull := dutils.GetZeroUser(db)
+ db.NewAudit(userNull, fmt.Sprintf("auto turn off signup"))
- // Display message in chat
- txt := fmt.Sprintf("auto turn off registrations")
- utils.LogErr(db.CreateSysMsg(txt, txt, "", config.GeneralRoomID, userNull.ID))
- }
+ // Display message in chat
+ txt := fmt.Sprintf("auto turn off registrations")
+ utils.LogErr(db.CreateSysMsg(txt, txt, "", config.GeneralRoomID, userNull.ID))
}
c.SetCookie(hutils.DeleteCookie(hutils.WaitCookieName))