Started work on implementing chat buffer.

This commit is contained in:
rainbow napkin 2025-06-11 08:02:50 -04:00
parent 370a08cb03
commit 8821b5cff9
4 changed files with 100 additions and 5 deletions

28
src/app/channel/chat.js Normal file
View file

@ -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 <https://www.gnu.org/licenses/>.*/
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;

View file

@ -22,12 +22,17 @@ const commandPreprocessor = require('./commandPreprocessor');
const loggerUtils = require('../../utils/loggerUtils'); const loggerUtils = require('../../utils/loggerUtils');
const linkUtils = require('../../utils/linkUtils'); const linkUtils = require('../../utils/linkUtils');
const emoteValidator = require('../../validators/emoteValidator'); const emoteValidator = require('../../validators/emoteValidator');
const chat = require('./chat');
const {userModel} = require('../../schemas/user/userSchema'); const {userModel} = require('../../schemas/user/userSchema');
module.exports = class{ module.exports = class{
constructor(server){ constructor(server){
//Set server
this.server = server; this.server = server;
//Initialize command preprocessor
this.commandPreprocessor = new commandPreprocessor(server, this) this.commandPreprocessor = new commandPreprocessor(server, this)
//Define the chat buffer
this.chatBuffer = [];
} }
defineListeners(socket){ defineListeners(socket){
@ -126,21 +131,33 @@ module.exports = class{
//Base chat functions //Base chat functions
relayChat(user, flair, highLevel, msg, type = 'chat', chan, links){ 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){ 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){ 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 //User Chat Functions
relayUserChat(socket, msg, type, links){ relayUserChat(socket, msg, type, links){
const user = this.server.getSocketInfo(socket); 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 //Toke Chat Functions

View file

@ -31,6 +31,7 @@ const channelPermissionSchema = require('./channelPermissionSchema');
const channelBanSchema = require('./channelBanSchema'); const channelBanSchema = require('./channelBanSchema');
const queuedMediaSchema = require('./media/queuedMediaSchema'); const queuedMediaSchema = require('./media/queuedMediaSchema');
const playlistSchema = require('./media/playlistSchema'); const playlistSchema = require('./media/playlistSchema');
const chatSchema = require('./chatSchema');
//Utils //Utils
const { exceptionHandler, errorHandler } = require('../../utils/loggerUtils'); 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 //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]
}); });

View file

@ -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 <https://www.gnu.org/licenses/>.*/
//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;