Started work on implementing chat buffer.
This commit is contained in:
parent
370a08cb03
commit
8821b5cff9
28
src/app/channel/chat.js
Normal file
28
src/app/channel/chat.js
Normal 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;
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
48
src/schemas/channel/chatSchema.js
Normal file
48
src/schemas/channel/chatSchema.js
Normal 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;
|
||||||
Loading…
Reference in a new issue