Started work on userlist profile tooltips and context menus.
This commit is contained in:
parent
9df7f52e9e
commit
9a8def18d7
16 changed files with 372 additions and 22 deletions
|
|
@ -104,8 +104,8 @@ module.exports = class tokebot{
|
|||
this.chatHandler.relayTokeWhisper(commandObj.socket, `Please wait ${this.cooldownCounter} seconds before starting a new group toke.`);
|
||||
}
|
||||
|
||||
//Toke command found, don't send as chat
|
||||
return false;
|
||||
//Toke command found, and there isn't any extra text, don't send as chat (re-create fore.st tokebot behaviour)
|
||||
return (commandObj.command != `!${commandObj.argumentArray[0]}`)
|
||||
}else{
|
||||
//No toke found, send it down the line, because shaming the user is funny
|
||||
return true;
|
||||
|
|
|
|||
42
src/controllers/panel/profileController.js
Normal file
42
src/controllers/panel/profileController.js
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/*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 {validationResult, matchedData} = require('express-validator');
|
||||
|
||||
//local imports
|
||||
const {userModel} = require('../../schemas/user/userSchema');
|
||||
const {exceptionHandler, errorHandler} = require('../../utils/loggerUtils');
|
||||
|
||||
//root index functions
|
||||
module.exports.get = async function(req, res){
|
||||
try{
|
||||
const validResult = validationResult(req);
|
||||
|
||||
if(validResult.isEmpty()){
|
||||
const data = matchedData(req);
|
||||
const profile = await userModel.findProfile({user: data.user});
|
||||
|
||||
return res.render('partial/panels/profile', {profile});
|
||||
}else{
|
||||
res.status(400);
|
||||
return res.send({errors: validResult.array()})
|
||||
}
|
||||
|
||||
}catch(err){
|
||||
return exceptionHandler(res, err);
|
||||
}
|
||||
}
|
||||
42
src/controllers/tooltip/profileController.js
Normal file
42
src/controllers/tooltip/profileController.js
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/*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 {validationResult, matchedData} = require('express-validator');
|
||||
|
||||
//local imports
|
||||
const {userModel} = require('../../schemas/user/userSchema');
|
||||
const {exceptionHandler, errorHandler} = require('../../utils/loggerUtils');
|
||||
|
||||
//root index functions
|
||||
module.exports.get = async function(req, res){
|
||||
try{
|
||||
const validResult = validationResult(req);
|
||||
|
||||
if(validResult.isEmpty()){
|
||||
const data = matchedData(req);
|
||||
const profile = await userModel.findProfile({user: data.user});
|
||||
|
||||
return res.render('partial/tooltip/profile', {profile});
|
||||
}else{
|
||||
res.status(400);
|
||||
return res.send({errors: validResult.array()})
|
||||
}
|
||||
|
||||
}catch(err){
|
||||
return exceptionHandler(res, err);
|
||||
}
|
||||
}
|
||||
|
|
@ -22,6 +22,9 @@ const { Router } = require('express');
|
|||
const placeholderController = require("../controllers/panel/placeholderController");
|
||||
const emoteController = require("../controllers/panel/emoteController");
|
||||
const popoutContainerController = require("../controllers/panel/popoutContainerController");
|
||||
const profileController = require("../controllers/panel/profileController");
|
||||
//Validators
|
||||
const accountValidator = require("../validators/accountValidator");
|
||||
|
||||
//globals
|
||||
const router = Router();
|
||||
|
|
@ -30,5 +33,6 @@ const router = Router();
|
|||
router.get('/placeholder', placeholderController.get);
|
||||
router.get('/emote', emoteController.get);
|
||||
router.get('/popoutContainer', popoutContainerController.get);
|
||||
router.get('/profile', accountValidator.user(), profileController.get);
|
||||
|
||||
module.exports = router;
|
||||
|
|
|
|||
|
|
@ -19,14 +19,19 @@ const { Router } = require('express');
|
|||
|
||||
|
||||
//local imports
|
||||
const altListController = require("../controllers/tooltip/altListController");
|
||||
const permissionSchema = require("../schemas/permissionSchema");
|
||||
//DB Models
|
||||
const permissionModel = require("../schemas/permissionSchema");
|
||||
//Validators
|
||||
const accountValidator = require("../validators/accountValidator");
|
||||
//controllers
|
||||
const altListController = require("../controllers/tooltip/altListController");
|
||||
const profileController = require("../controllers/tooltip/profileController");
|
||||
|
||||
//globals
|
||||
const router = Router();
|
||||
|
||||
//routing functions
|
||||
router.get('/altList', accountValidator.user(), permissionSchema.reqPermCheck("adminPanel"), altListController.get);
|
||||
router.get('/altList', accountValidator.user(), permissionModel.reqPermCheck("adminPanel"), altListController.get);
|
||||
router.get('/profile', accountValidator.user(), profileController.get);
|
||||
|
||||
module.exports = router;
|
||||
|
|
|
|||
32
src/views/partial/panels/profile.ejs
Normal file
32
src/views/partial/panels/profile.ejs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<%# 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/>. %>
|
||||
<link rel="stylesheet" type="text/css" href="/css/panel/profile.css">
|
||||
<div id="profile-panel">
|
||||
<% if(profile == null){ %>
|
||||
<p>Profile not found!</p>
|
||||
<% }else{ %>
|
||||
<a class="panel profile-link" target="_blank" href="/profile/<%- profile.user %>">View Full Profile<i class="bi-box-arrow-in-up-right"></i></a>
|
||||
<h2 class="panel profile-name"><%- profile.user %></h2>
|
||||
<img class="panel profile-img" src="<%- profile.img %>">
|
||||
<p class="panel profile-info">Toke Count: <%- profile.tokeCount %></p>
|
||||
<% if(profile.pronouns != '' && profile.pronouns != null){ %>
|
||||
<p class="panel profile-info">Pronouns: <%- profile.pronouns %></p>
|
||||
<% } %>
|
||||
<p class="panel profile-info">Signature: <%- profile.signature %></p>
|
||||
<p class="panel profile-bio-label">Bio:</p>
|
||||
<p class="panel profile-bio"><%- profile.bio %></p>
|
||||
<% } %>
|
||||
</div>
|
||||
|
|
@ -19,6 +19,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. %>
|
|||
<div class="seperator"></div>
|
||||
<p class="tooltip">User: <%- alts[alt].user %></p>
|
||||
<p class="tooltip">ID: <%- alts[alt].id %></p>
|
||||
<% if(alts[alt].pronouns != '' && alts[alt].pronouns != null){ %>
|
||||
<p class="tooltip">Pronouns: <%- alts[alt].pronouns %></p>
|
||||
<% } %>
|
||||
<p class="tooltip">Signature: <%- alts[alt].signature %></p>
|
||||
<p class="tooltip">Toke Count: <%- alts[alt].tokeCount %></p>
|
||||
<p class="tooltip">Joined: <%- alts[alt].date.toLocaleString() %></p>
|
||||
|
|
|
|||
27
src/views/partial/tooltip/profile.ejs
Normal file
27
src/views/partial/tooltip/profile.ejs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<%# 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/>. %>
|
||||
<link rel="stylesheet" type="text/css" href="/css/tooltip/profile.css">
|
||||
<% if(profile == null){ %>
|
||||
<p>Profile not found!</p>
|
||||
<% }else{ %>
|
||||
<h2 class="tooltip profile-name"><%- profile.user %></h2>
|
||||
<img class="tooltip profile-img" src="<%- profile.img %>">
|
||||
<p class="tooltip">Toke Count: <%- profile.tokeCount %></p>
|
||||
<% if(profile.pronouns != '' && profile.pronouns != null){ %>
|
||||
<p class="tooltip">Pronouns: <%- profile.pronouns %></p>
|
||||
<% } %>
|
||||
<p class="tooltip">Signature: <%- profile.signature %></p>
|
||||
<% } %>
|
||||
Loading…
Add table
Add a link
Reference in a new issue