Apps Home
|
Create an App
Hogwarts houses bot
Author:
mrs_strokess
Description
Source Code
Launch App
Current Users
Created by:
Mrs_Strokess
cb.settings_choices = [ { name: 'ulMemberList', label: 'List of Gryffindor members, separated by commas (CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false }, { name: 'avMemberList', label: 'List of Slytherin members, separated by commas (CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false }, { name: 'wgMemberList', label: 'List of Hufflepuff members, separated by commas (CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false }, { name: 'rcMemberList', label: 'List of Ravenclaw members, separated by commas (CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false }, { name: 'afMemberList', label: 'List of Auror Force members, separated by commas (CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false }, { name: 'ulText', label: 'Text to put in front of Gryffindor Members', type: 'str', minLength: 0, maxLength: 20, required: false, defaultValue: ':rr-gryffindor' }, { name: 'avText', label: 'Text to put in front of Slytherin Members', type: 'str', minLength: 0, maxLength: 20, required: false, defaultValue: ':rr-slytherin' }, { name: 'wgText', label: 'Text to put in front of Hufflepuff Members', type: 'str', minLength: 0, maxLength: 20, required: false, defaultValue: ':rr-hufflepuff' }, { name: 'rcText', label: 'Text to put in front of Ravenclaw Members', type: 'str', minLength: 0, maxLength: 20, required: false, defaultValue: ':rr-ravenclaw' }, { name: 'afText', label: 'Text to put in front of Auror Force Members', type: 'str', minLength: 0, maxLength: 20, required: false, defaultValue: ':rr-aurorforce' }, { name: 'ulTextColor', label: 'Gryffindor text color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '7F0909' }, { name: 'avTextColor', label: 'Slytherin text color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '0D6217' }, { name: 'wgTextColor', label: 'Hufflepuff text color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '000000' }, { name: 'rcTextColor', label: 'Ravenclaw text color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '000A90' }, { name: 'afTextColor', label: 'Auror Force text color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'FF00FF' }, { name: 'ulBGColor', label: 'Gryffindor background color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'FFC500' }, { name: 'avBGColor', label: 'Slytherin background color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'AAAAAA' }, { name: 'wgBGColor', label: 'Hufflepuff background color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'EEE117' }, { name: 'rcBGColor', label: 'Ravenclaw background color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '946B2D' }, { name: 'afBGColor', label: 'Auror Force background color (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '00FFFF' }, { name: 'bothBGColor', label: 'Background color for Gryffindor+Auror overlap (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'FF8800' }, { name: 'bothTextColor', label: 'Text color for Gryffindor+Auror overlap (hex without #)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'FFFFFF' } ]; // Member objects to store usernames const ulMembers = {}; const avMembers = {}; const wgMembers = {}; const rcMembers = {}; const afMembers = {}; // Process incoming messages cb.onMessage(function(msg) { const u = msg['user']; const message = msg['m'].trim(); // Handle commands (restricted to broadcaster or moderators) if (msg['is_mod'] || msg['user'] === cb.room_slug) { // Add commands if (message.startsWith('/addG @')) { const username = message.replace('/addG @', '').toLowerCase().trim(); if (username) { addToHouse(username, 'gryffindor'); cb.sendNotice(`${username} added to Gryffindor!`, u); } } else if (message.startsWith('/addS @')) { const username = message.replace('/addS @', '').toLowerCase().trim(); if (username) { addToHouse(username, 'slytherin'); cb.sendNotice(`${username} added to Slytherin!`, u); } } else if (message.startsWith('/addH @')) { const username = message.replace('/addH @', '').toLowerCase().trim(); if (username) { addToHouse(username, 'hufflepuff'); cb.sendNotice(`${username} added to Hufflepuff!`, u); } } else if (message.startsWith('/addR @')) { const username = message.replace('/addR @', '').toLowerCase().trim(); if (username) { addToHouse(username, 'ravenclaw'); cb.sendNotice(`${username} added to Ravenclaw!`, u); } } else if (message.startsWith('/addA @')) { const username = message.replace('/addA @', '').toLowerCase().trim(); if (username) { addToHouse(username, 'aurorforce'); cb.sendNotice(`${username} added to Auror Force!`, u); } } // Remove commands else if (message.startsWith('/removeG @')) { const username = message.replace('/removeG @', '').toLowerCase().trim(); if (username && isUL(username)) { removeFromHouse(username, 'gryffindor'); cb.sendNotice(`${username} removed from Gryffindor!`, u); } else if (username) { cb.sendNotice(`${username} is not in Gryffindor!`, u); } } else if (message.startsWith('/removeS @')) { const username = message.replace('/removeS @', '').toLowerCase().trim(); if (username && isAV(username)) { removeFromHouse(username, 'slytherin'); cb.sendNotice(`${username} removed from Slytherin!`, u); } else if (username) { cb.sendNotice(`${username} is not in Slytherin!`, u); } } else if (message.startsWith('/removeH @')) { const username = message.replace('/removeH @', '').toLowerCase().trim(); if (username && isWG(username)) { removeFromHouse(username, 'hufflepuff'); cb.sendNotice(`${username} removed from Hufflepuff!`, u); } else if (username) { cb.sendNotice(`${username} is not in Hufflepuff!`, u); } } else if (message.startsWith('/removeR @')) { const username = message.replace('/removeR @', '').toLowerCase().trim(); if (username && isRC(username)) { removeFromHouse(username, 'ravenclaw'); cb.sendNotice(`${username} removed from Ravenclaw!`, u); } else if (username) { cb.sendNotice(`${username} is not in Ravenclaw!`, u); } } else if (message.startsWith('/removeA @')) { const username = message.replace('/removeA @', '').toLowerCase().trim(); if (username && isAF(username)) { removeFromHouse(username, 'aurorforce'); cb.sendNotice(`${username} removed from Auror Force!`, u); } else if (username) { cb.sendNotice(`${username} is not in Auror Force!`, u); } } // List commands else if (message === '/listG') { const members = Object.keys(ulMembers).join(', ') || 'No members'; cb.sendNotice(`Gryffindor members: ${members}`, u); } else if (message === '/listS') { const members = Object.keys(avMembers).join(', ') || 'No members'; cb.sendNotice(`Slytherin members: ${members}`, u); } else if (message === '/listH') { const members = Object.keys(wgMembers).join(', ') || 'No members'; cb.sendNotice(`Hufflepuff members: ${members}`, u); } else if (message === '/listR') { const members = Object.keys(rcMembers).join(', ') || 'No members'; cb.sendNotice(`Ravenclaw members: ${members}`, u); } else if (message === '/listA') { const members = Object.keys(afMembers).join(', ') || 'No members'; cb.sendNotice(`Auror Force members: ${members}`, u); } } // Apply house styling if (isUL(u) && isAF(u)) { msg['background'] = '#' + (cb.settings.bothBGColor || 'FF8800'); msg['c'] = '#' + (cb.settings.bothTextColor || 'FFFFFF'); msg['m'] = " " + (cb.settings.ulText || ':rr-gryffindor') + " / " + (cb.settings.afText || ':rr-aurorforce') + " " + msg['m']; } else if (isUL(u)) { msg['background'] = '#' + (cb.settings.ulBGColor || 'FFC500'); msg['c'] = '#' + (cb.settings.ulTextColor || '7F0909'); msg['m'] = " " + (cb.settings.ulText || ':rr-gryffindor') + " " + msg['m']; } else if (isAV(u)) { msg['background'] = '#' + (cb.settings.avBGColor || 'AAAAAA'); msg['c'] = '#' + (cb.settings.avTextColor || '0D6217'); msg['m'] = " " + (cb.settings.avText || ':rr-slytherin') + " " + msg['m']; } else if (isWG(u)) { msg['background'] = '#' + (cb.settings.wgBGColor || 'EEE117'); msg['c'] = '#' + (cb.settings.wgTextColor || '000000'); msg['m'] = " " + (cb.settings.wgText || ':rr-hufflepuff') + " " + msg['m']; } else if (isRC(u)) { msg['background'] = '#' + (cb.settings.rcBGColor || '946B2D'); msg['c'] = '#' + (cb.settings.rcTextColor || '000A90'); msg['m'] = " " + (cb.settings.rcText || ':rr-ravenclaw') + " " + msg['m']; } else if (isAF(u)) { msg['background'] = '#' + (cb.settings.afBGColor || '00FFFF'); msg['c'] = '#' + (cb.settings.afTextColor || 'FF00FF'); msg['m'] = " " + (cb.settings.afText || ':rr-aurorforce') + " " + msg['m']; } return msg; }); // Membership check functions function isUL(username) { return username in ulMembers; } function isAV(username) { return username in avMembers; } function isWG(username) { return username in wgMembers; } function isRC(username) { return username in rcMembers; } function isAF(username) { return username in afMembers; } // Function to add a user to a specific house function addToHouse(username, house) { switch (house.toLowerCase()) { case 'gryffindor': ulMembers[username] = { 'u': 1 }; break; case 'slytherin': avMembers[username] = { 'u': 1 }; break; case 'hufflepuff': wgMembers[username] = { 'u': 1 }; break; case 'ravenclaw': rcMembers[username] = { 'u': 1 }; break; case 'aurorforce': afMembers[username] = { 'u': 1 }; break; default: cb.log(`Unknown house: ${house}`); } } // Function to remove a user from a specific house function removeFromHouse(username, house) { switch (house.toLowerCase()) { case 'gryffindor': delete ulMembers[username]; break; case 'slytherin': delete avMembers[username]; break; case 'hufflepuff': delete wgMembers[username]; break; case 'ravenclaw': delete rcMembers[username]; break; case 'aurorforce': delete afMembers[username]; break; default: cb.log(`Unknown house: ${house}`); } } // Populate membership objects from settings function grabSettings() { cb.log("Starting to grab settings"); const processList = (list, targetObj, listName) => { if (list && typeof list === 'string') { const members = list.split(','); for (let i = 0; i < members.length; i++) { const clean = members[i].toLowerCase().trim(); if (clean) { targetObj[clean] = { 'u': 1 }; } } } else if (list) { cb.log(`Warning: ${listName} is not a valid string`); } }; processList(cb.settings.ulMemberList, ulMembers, 'ulMemberList'); processList(cb.settings.avMemberList, avMembers, 'avMemberList'); processList(cb.settings.wgMemberList, wgMembers, 'wgMemberList'); processList(cb.settings.rcMemberList, rcMembers, 'rcMemberList'); processList(cb.settings.afMemberList, afMembers, 'afMemberList'); cb.log("Finished grabbing settings"); } // Initialize by grabbing settings grabSettings();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.