diff --git a/src/app/channel/chat.js b/src/app/channel/chat.js
new file mode 100644
index 0000000..5414a67
--- /dev/null
+++ b/src/app/channel/chat.js
@@ -0,0 +1,28 @@
+/*Canopy - The next generation of stoner streaming software
+Copyright (C) 2024-2025 Rainbownapkin and the TTN Community
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .*/
+
+class chat{
+ constructor(user, flair, highLevel, msg, type, links){
+ this.user = user;
+ this.flair = flair;
+ this.highLevel = highLevel;
+ this.msg = msg;
+ this.type = type;
+ this.links = links;
+ }
+}
+
+module.exports = chat;
\ No newline at end of file
diff --git a/src/app/channel/chatHandler.js b/src/app/channel/chatHandler.js
index 4248b61..ad627f4 100644
--- a/src/app/channel/chatHandler.js
+++ b/src/app/channel/chatHandler.js
@@ -22,12 +22,17 @@ const commandPreprocessor = require('./commandPreprocessor');
const loggerUtils = require('../../utils/loggerUtils');
const linkUtils = require('../../utils/linkUtils');
const emoteValidator = require('../../validators/emoteValidator');
+const chat = require('./chat');
const {userModel} = require('../../schemas/user/userSchema');
module.exports = class{
constructor(server){
+ //Set server
this.server = server;
+ //Initialize command preprocessor
this.commandPreprocessor = new commandPreprocessor(server, this)
+ //Define the chat buffer
+ this.chatBuffer = [];
}
defineListeners(socket){
@@ -126,21 +131,33 @@ module.exports = class{
//Base chat functions
relayChat(user, flair, highLevel, msg, type = 'chat', chan, links){
- this.server.io.in(chan).emit("chatMessage", {user, flair, highLevel, msg, type, links});
+ this.relayChatObject(chan, new chat(user, flair, highLevel, msg, type, links));
+ }
+
+ relayChatObject(chan, chat){
+ this.server.io.in(chan).emit("chatMessage", chat);
}
relayPrivateChat(socket, user, flair, highLevel, msg, type, links){
- socket.emit("chatMessage", {user, flair, highLevel, msg, type, links});
+ this.relayPrivateChatObject(socket , new chat(user, flair, highLevel, msg, type, links));
+ }
+
+ relayPrivateChatObject(socket, chat){
+ socket.emit("chatMessage", chat);
}
relayGlobalChat(user, flair, highLevel, msg, type = 'chat', links){
- this.server.io.emit("chatMessage", {user, flair, highLevel, msg, type, links});
+ this.relayGlobalChatObject("chatMessage", new chat(user, flair, highLevel, msg, type, links));
+ }
+
+ relayGlobalChatObject(chat){
+ this.server.io.emit("chatMessage", chat);
}
//User Chat Functions
relayUserChat(socket, msg, type, links){
const user = this.server.getSocketInfo(socket);
- this.relayChat(user.user, user.flair, user.highLevel, msg, type, socket.chan, links)
+ this.relayChat(user.user, user.flair, user.highLevel, msg, type, socket.chan, links);
}
//Toke Chat Functions
diff --git a/src/schemas/channel/channelSchema.js b/src/schemas/channel/channelSchema.js
index fd2d4ad..75e8593 100644
--- a/src/schemas/channel/channelSchema.js
+++ b/src/schemas/channel/channelSchema.js
@@ -31,6 +31,7 @@ const channelPermissionSchema = require('./channelPermissionSchema');
const channelBanSchema = require('./channelBanSchema');
const queuedMediaSchema = require('./media/queuedMediaSchema');
const playlistSchema = require('./media/playlistSchema');
+const chatSchema = require('./chatSchema');
//Utils
const { exceptionHandler, errorHandler } = require('../../utils/loggerUtils');
@@ -118,7 +119,8 @@ const channelSchema = new mongoose.Schema({
}
},
//Thankfully we don't have to keep track of alts, ips, or deleted users so this should be a lot easier than site-wide bans :P
- banList: [channelBanSchema]
+ banList: [channelBanSchema],
+ chatBuffer: [chatSchema]
});
diff --git a/src/schemas/channel/chatSchema.js b/src/schemas/channel/chatSchema.js
new file mode 100644
index 0000000..b54f9b6
--- /dev/null
+++ b/src/schemas/channel/chatSchema.js
@@ -0,0 +1,48 @@
+/*Canopy - The next generation of stoner streaming software
+Copyright (C) 2024-2025 Rainbownapkin and the TTN Community
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .*/
+
+//NPM Imports
+const {mongoose} = require('mongoose');
+
+const chatSchema = new mongoose.Schema({
+ user: {
+ type: mongoose.SchemaTypes.String,
+ required: true,
+ },
+ flair: {
+ type: mongoose.SchemaTypes.String,
+ required: true,
+ },
+ highLevel: {
+ type: mongoose.SchemaTypes.Number,
+ required: true,
+ },
+ msg: {
+ type: mongoose.SchemaTypes.String,
+ required: true,
+ },
+ type: {
+ type: mongoose.SchemaTypes.String,
+ required: true,
+ },
+ links: {
+ type: [mongoose.SchemaTypes.Number],
+ required: true,
+ },
+});
+
+
+module.exports = chatSchema;
\ No newline at end of file