diff --git a/.gitignore b/.gitignore
index 836af14..4f90eb3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
.vscode/*
styles/taskList.css.map
styles/taskList.scss
-to-do.md
\ No newline at end of file
+to-do.md
+updates
\ No newline at end of file
diff --git a/configs.js b/configs.js
index 1d00d91..238f930 100644
--- a/configs.js
+++ b/configs.js
@@ -252,6 +252,8 @@ const configs = (function () {
leaderboardCommands: ["!leaderboard", "!lb", "!top", "!toppoints"],
+ TaskMasterCommands: ["!taskmaster", "!taskchampion"],
+
// Help commands - please add commands in the exact format
helpCommands: [
"!taskh",
@@ -282,13 +284,13 @@ const configs = (function () {
adminClearTasksCommands: ["!cleartasks"],
- adminResetBoardCount: ["!resetboardcount", "!resetallcount"],
+ adminResetBoardCountCommands: ["!resetboardcount", "!resetallcount"],
- adminResetUsersCount: ["!resetuserscount"],
+ adminResetUsersCountCommands: ["!resetuserscount"],
adminClearAllCommands: ["!clearallnoregrets"],
- adminSetBoardCount: ["!setboardcount", "!setallcount"],
+ adminSetBoardCountCommands: ["!setboardcount", "!setallcount"],
additionalCommands: {
"!botcred":
"{user} Ryan is the creator of this bot! You can find him on https://github.com/liyunze-coding or https://www.twitch.tv/RythonDev",
@@ -367,6 +369,10 @@ const configs = (function () {
leaderboard: "Leaderboard: {leaderboard}",
setUserTaskCount: "{mentioned} now has {taskCount} tasks!",
+ // Grouped by taskmaster-related responses
+ taskMaster: "{user} Task Master: {taskMaster} [{taskMasterCount}]",
+ noTaskMaster: "No task master yet, {user}!",
+
// Grouped by permission-related responses
notMod: "Permission denied, {user}; Mods only",
notStreamer: "Permission denied, {user}; Streamer only",
diff --git a/index.html b/index.html
index acaca72..b6e0ec3 100644
--- a/index.html
+++ b/index.html
@@ -9,8 +9,9 @@
-
-
+
+
+
diff --git a/scripts/functions.js b/scripts/functions.js
index 6334a82..52dc5fc 100644
--- a/scripts/functions.js
+++ b/scripts/functions.js
@@ -6,6 +6,8 @@ function getResponse(responseName) {
}
function getCommand(commandName) {
+ console.log(configs.commands[commandName]);
+ console.log(defaultConfigs.commands[commandName]);
return (
configs.commands[commandName] ?? defaultConfigs.commands[commandName]
);
diff --git a/scripts/index.js b/scripts/index.js
index 1094d7f..b8fc9b4 100644
--- a/scripts/index.js
+++ b/scripts/index.js
@@ -1,5 +1,3 @@
-const commands = configs.commands;
-
let params = {};
function respond(template, params) {
@@ -18,530 +16,15 @@ function isStreamer(flags) {
return flags.broadcaster;
}
-async function processCommand(user, command, message, flags, extra) {
- params = {
- user: user,
- message: message,
- pointName: configs.settings.pointsName,
- };
-
- if (commands.addTaskCommands.includes(command)) {
- let addRequest = await addTask(user, extra.userColor, message);
-
- if (addRequest.status !== 200) {
- respond(addRequest.body.error, params);
- return;
- }
-
- let addedResponse = getResponse("taskAdded");
- params.task = addRequest.body.task;
-
- if (addRequest.body.tasksFailedToAdd !== "") {
- addedResponse += ` | Failed to add task(s): "${addRequest.body.tasksFailedToAdd}"`;
- }
-
- respond(addedResponse, params);
- } else if (commands.editTaskCommands.includes(command)) {
- let editRequest = await editTask(user, message);
-
- if (editRequest.status !== 200) {
- respond(editRequest.body.error, params);
- return;
- }
-
- let originalTask = editRequest.body.originalTask;
- let newTask = editRequest.body.newTask;
-
- params.task = newTask;
- params.originalTask = originalTask;
-
- respond(getResponse("taskEdited"), params);
- } else if (commands.deleteTaskCommands.includes(command)) {
- let removeRequest = await removeTask(user, message);
-
- if (removeRequest.status !== 200) {
- respond(removeRequest.body.error, params);
- return;
- }
- let deletedResponse = getResponse("taskDeleted");
-
- let removedTasks = removeRequest.body.removedTasks;
- let failedTasks = removeRequest.body.failedTasks;
-
- params.task = removedTasks;
-
- if (failedTasks !== "") {
- deletedResponse += ` | Failed to delete task(s): "${failedTasks}"`;
- }
-
- respond(deletedResponse, params);
- } else if (commands.finishTaskCommands.includes(command)) {
- if (message === "all") {
- let finishAllRequest = await markAllTasksAsDone(user);
-
- if (finishAllRequest.status !== 200) {
- respond(finishAllRequest.body.error, params);
- return;
- }
-
- let finishedAllResponse = getResponse("allTasksFinished");
- params.doneCount = await completedTasksCount(user);
-
- respond(finishedAllResponse, params);
- return;
- }
-
- let finishRequest = await markTaskDone(user, message);
-
- if (finishRequest.status !== 200) {
- respond(finishRequest.body.error, params);
- return;
- }
-
- let finishedResponse = getResponse("taskFinished");
-
- params.task = finishRequest.body.markedTasks;
- params.doneCount = await completedTasksCount(user);
- params.pointCount =
- finishRequest.body.markedTasksCount *
- configs.settings.pointsPerTask;
-
- if (finishRequest.body.failedTasks !== "") {
- finishedResponse += ` | Failed to finish task(s): "${finishRequest.body.failedTasks}"`;
- }
-
- respond(finishedResponse, params);
- } else if (commands.unfinishTaskCommands.includes(command)) {
- let unfinishRequest = await markTaskUndone(user, message);
-
- if (unfinishRequest.status !== 200) {
- respond(unfinishRequest.body.error, params);
- return;
- }
-
- // task unfinished
- let unfinishedResponse = getResponse("taskUnfinished");
-
- params.task = unfinishRequest.body.markedTasks;
-
- if (unfinishRequest.body.failedTasks !== "") {
- unfinishedResponse += ` | Failed to unfinish task(s): "${unfinishRequest.body.failedTasks}"`;
- }
-
- respond(unfinishedResponse, params);
- } else if (commands.nextTaskCommands.includes(command)) {
- let nextRequest = await nextTask(user, message);
-
- if (nextRequest.status !== 200) {
- respond(nextRequest.body.error, params);
- return;
- }
-
- // task next
- let nextResponse = getResponse("taskNext");
-
- params.oldTask = nextRequest.body.oldTask;
- params.newTask = nextRequest.body.newTask;
-
- respond(nextResponse, params);
- } else if (commands.nowTaskCommands.includes(command)) {
- let nowRequest = await nowTask(user, extra.userColor, message);
-
- if (nowRequest.status !== 200) {
- respond(nowRequest.body.error, params);
- return;
- }
-
- // task now
- let nowResponse = getResponse("nowTask");
-
- params.task = nowRequest.body.task;
-
- respond(nowResponse, params);
- } else if (commands.focusTaskCommands.includes(command)) {
- let focusRequest = await focusTask(user, message);
-
- if (focusRequest.status !== 200) {
- respond(focusRequest.body.error, params);
- return;
- }
-
- // task focused
- let focusedResponse = getResponse("taskFocused");
-
- params.task = focusRequest.body.focusedTask;
-
- respond(focusedResponse, params);
- } else if (commands.unfocusTaskCommands.includes(command)) {
- let unfocusRequest = await unfocusTask(user);
-
- if (unfocusRequest.status !== 200) {
- respond(unfocusRequest.body.error, params);
- return;
- }
-
- // task unfocused
- let unfocusedResponse = getResponse("clearFocused");
-
- respond(unfocusedResponse, params);
- } else if (commands.checkCommands.includes(command)) {
- if (message === "") {
- let checkRequest = await checkTasks(user);
- if (checkRequest.status !== 200) {
- // no tasks
- respond(checkRequest.body.error, params);
- return;
- }
-
- return respond(checkRequest.body.reply, params);
- } else {
- let mentioned = message.replace("@", "");
- let checkRequest = await checkTasks(mentioned);
-
- if (checkRequest.status !== 200) {
- // no tasks
- respond(checkRequest.body.error, params);
-
- return;
- }
- return respond(checkRequest.body.reply, params);
- }
- } else if (commands.adminDeleteCommands.includes(command)) {
- if (!isMod(flags)) {
- respond(getResponse("notMod"), params);
- return;
- }
- let mentioned = message.replace("@", "");
-
- if (mentioned === "") {
- respond(getResponse("specifyUser"), params);
- return;
- }
-
- let clearUserTaskResponse = await clearUserTasks(mentioned);
-
- params.mentioned = mentioned;
-
- if (clearUserTaskResponse.status === 0) {
- // no tasks
- respond(getResponse("noTaskA"), params);
- return;
- }
-
- respond(getResponse("adminDeleteTasks"), params);
- return;
- } else if (commands.adminClearDoneCommands.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- clearAllDoneTasks();
- respond(getResponse("clearedDone"), params);
- return;
- } else if (commands.adminClearAllCommands.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- clearAll();
- respond(getResponse("clearedAll"), params);
- return;
- } else if (commands.clearMyDoneCommands.includes(command)) {
- let clearOwnDoneResponse = await clearOwnDoneTasks(user);
-
- if (clearOwnDoneResponse.status !== 200) {
- // no tasks
- respond(getResponse("noTask"), params);
- return;
- }
-
- respond(getResponse("clearedMyDone"), params);
- } else if (commands.adminClearNotStreamerCommands.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
- await clearMemory();
-
- await clearAllExceptStreamer(configs.StreamerUsernames);
- respond(getResponse("clearTasksExceptBroadcaster"), params);
- } else if (commands.adminClearTasksCommands.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
- await clearMemory();
-
- await clearAllTasks();
- respond(getResponse("clearedTasks"), params);
- } else if (commands.listCommands.includes(command)) {
- let listTaskResponse = await listTasks(user);
-
- if (listTaskResponse.status !== 200) {
- // no tasks
- respond(listTaskResponse.body.error, params);
- return;
- }
-
- respond(listTaskResponse.body.reply, params);
- } else if (commands.checkCountCommands.includes(command)) {
- if (message === "") {
- let count = await completedTasksCount(user);
-
- params.doneCount = count;
-
- return respond(getResponse("checkYourCount"), params);
- } else {
- let mentioned = message.replace("@", "");
- let count = await completedTasksCount(mentioned);
-
- params.doneCount = count;
- params.mentioned = mentioned;
-
- return respond(getResponse("checkUserCount"), params);
- }
- } else if (commands.checkAllCountCommands.includes(command)) {
- let count = getBoardTotalTaskCount();
-
- if (count === 0) {
- respond(getResponse("noCountAll"), params);
- return;
- }
-
- params.doneCount = count;
-
- respond(getResponse("checkAllCount"), params);
- } else if (commands.checkMyPointsCommands.includes(command)) {
- if (message === "") {
- let points = await getUserPoints(user);
-
- params.pointCount = points;
-
- return respond(getResponse("checkMyPoints"), params);
- } else {
- let mentioned = message.replace("@", "");
- let points = await getUserPoints(mentioned);
-
- params.pointCount = points;
- params.mentioned = mentioned;
-
- return respond(getResponse("checkUserPoints"), params);
- }
- } else if (commands.syncCountPointsCommands.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- await syncPointsToCount();
- respond(getResponse("syncCountPoints"), params);
- } else if (commands.addPointsCommands.includes(command)) {
- // !addpoints @user 100
-
- if (!isMod(flags)) {
- respond(getResponse("notMod"), params);
- return;
- }
-
- let mentioned = message.split(" ")[0].replace("@", "");
-
- if (mentioned === "") {
- respond(getResponse("specifyUser"), params);
- return;
- }
-
- let points = message.split(" ")[1];
-
- if (points === undefined) {
- respond(getResponse("specifyPoints"), params);
- return;
- }
-
- if (!/^\d+$/.test(points)) {
- respond(getResponse("invalidNumber"), params);
- return;
- }
-
- points = parseInt(points);
-
- await addPoints(mentioned, points);
-
- params.mentioned = mentioned;
- params.pointCount = points;
-
- respond(getResponse("addPoints"), params);
- } else if (commands.reducePointsCommands.includes(command)) {
- if (!isMod(flags)) {
- respond(getResponse("notMod"), params);
- return;
- }
-
- let mentioned = message.split(" ")[0].replace("@", "");
-
- if (mentioned === "") {
- respond(getResponse("specifyUser"), params);
- return;
- }
-
- let points = message.split(" ")[1];
-
- if (points == undefined) {
- respond(getResponse("specifyPoints"), params);
- return;
- }
-
- if (!/^\d+$/.test(points)) {
- respond(getResponse("invalidNumber"), params);
- return;
- }
-
- await reducePoints(mentioned, points);
-
- params.mentioned = mentioned;
- params.pointCount = points;
-
- respond(getResponse("reducePoints"), params);
- } else if (commands.setUserPointsCommands.includes(command)) {
- if (!isMod(flags)) {
- respond(getResponse("notMod"), params);
- return;
- }
-
- let mentioned = message.split(" ")[0].replace("@", "");
-
- if (mentioned === "") {
- respond(getResponse("specifyUser"), params);
- return;
- }
-
- let points = message.split(" ")[1];
-
- if (points === undefined) {
- respond(getResponse("specifyPoints"), params);
- return;
- }
-
- if (!/^\d+$/.test(points)) {
- respond(getResponse("invalidNumber"), params);
- return;
- }
-
- points = parseInt(points);
-
- await setUserPoints(mentioned, points);
-
- params.mentioned = mentioned;
- params.pointCount = points;
-
- respond(getResponse("setUserPoints"), params);
- } else if (commands.setUserTaskCountCommands.includes(commands)) {
- if (!isMod(flags)) {
- respond(getResponse("notMod"), params);
- return;
- }
-
- let mentioned = message.split(" ")[0].replace("@", "");
-
- if (mentioned === "") {
- respond(getResponse("specifyUser"), params);
- return;
- }
-
- let count = message.split(" ")[1];
-
- if (count === undefined) {
- respond(getResponse("specifyCount"), params);
- return;
- }
-
- if (!/^\d+$/.test(count)) {
- respond(getResponse("invalidNumber"), params);
- return;
- }
-
- points = parseInt(points);
-
- await setUserTaskCount(mentioned, count);
-
- params.mentioned = mentioned;
- params.pointCount = count;
-
- respond(getResponse("setUserTaskCount"), params);
- } else if (commands.leaderboardCommands.includes(command)) {
- let leaderboardResponse = leaderboardTaskCount(5);
-
- if (leaderboardResponse.status !== 200) {
- respond(leaderboardResponse.body.error, params);
- return;
- }
-
- let leaderboard = leaderboardResponse.body.leaderboard;
-
- respond(leaderboard, params);
- } else if (commands.adminSetBoardCount.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- // check if message is a number using regex
- if (!/^\d+$/.test(message)) {
- respond(getResponse("invalidNumber"), params);
- return;
- }
-
- params.count = message;
-
- await setTotalCompleteCount(message);
-
- respond(getResponse("setBoardCount"), params);
- } else if (commands.adminResetBoardCount.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- await resetBoardCount();
- respond(getResponse("clearedBoardCount"), params);
- } else if (commands.adminResetUsersCount.includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- await resetUsersCount();
- respond(getResponse("clearedUsersCount"), params);
- } else if (commands.helpCommands.includes(command)) {
- respond(getResponse("help"), params);
- } else if (command === "!clearlocalstorage") {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- clearLocalStorage();
-
- respond(getResponse("clearLocalStorage"), params);
- } else if (["!transferdata"].includes(command)) {
- if (!isStreamer(flags)) {
- respond(getResponse("notStreamer"), params);
- return;
- }
-
- await transferLocalStorageToIndexedDB();
- } else if (commands.additionalCommands[command]) {
- respond(commands.additionalCommands[command], params);
- } else {
- // command not found
- }
-}
-
ComfyJS.onCommand = (user, command, message, flags, extra) => {
command = `!${command.toLowerCase()}`;
processCommand(user, command, message, flags, extra);
};
-ComfyJS.Init(auth.username, `oauth:${auth.oauth}`, [auth.channel]);
+const oauth_token = auth.oauth.includes("oauth:")
+ ? auth.oauth
+ : `oauth:${auth.oauth}`;
+const auth_username = auth.username ? auth.username : auth.channel;
+
+ComfyJS.Init(auth_username, `${oauth_token}`, [auth.channel]);
diff --git a/scripts/processCommand.js b/scripts/processCommand.js
new file mode 100644
index 0000000..5600503
--- /dev/null
+++ b/scripts/processCommand.js
@@ -0,0 +1,531 @@
+async function processCommand(user, command, message, flags, extra) {
+ params = {
+ user: user,
+ message: message,
+ pointName: configs.settings.pointsName,
+ };
+
+ if (getCommand("addTaskCommands").includes(command)) {
+ let addRequest = await addTask(user, extra.userColor, message);
+
+ if (addRequest.status !== 200) {
+ respond(addRequest.body.error, params);
+ return;
+ }
+
+ let addedResponse = getResponse("taskAdded");
+ params.task = addRequest.body.task;
+
+ if (addRequest.body.tasksFailedToAdd !== "") {
+ addedResponse += ` | Failed to add task(s): "${addRequest.body.tasksFailedToAdd}"`;
+ }
+
+ respond(addedResponse, params);
+ } else if (getCommand("editTaskCommands").includes(command)) {
+ let editRequest = await editTask(user, message);
+
+ if (editRequest.status !== 200) {
+ respond(editRequest.body.error, params);
+ return;
+ }
+
+ let originalTask = editRequest.body.originalTask;
+ let newTask = editRequest.body.newTask;
+
+ params.task = newTask;
+ params.originalTask = originalTask;
+
+ respond(getResponse("taskEdited"), params);
+ } else if (getCommand("deleteTaskCommands").includes(command)) {
+ let removeRequest = await removeTask(user, message);
+
+ if (removeRequest.status !== 200) {
+ respond(removeRequest.body.error, params);
+ return;
+ }
+ let deletedResponse = getResponse("taskDeleted");
+
+ let removedTasks = removeRequest.body.removedTasks;
+ let failedTasks = removeRequest.body.failedTasks;
+
+ params.task = removedTasks;
+
+ if (failedTasks !== "") {
+ deletedResponse += ` | Failed to delete task(s): "${failedTasks}"`;
+ }
+
+ respond(deletedResponse, params);
+ } else if (getCommand("finishTaskCommands").includes(command)) {
+ if (message === "all") {
+ let finishAllRequest = await markAllTasksAsDone(user);
+
+ if (finishAllRequest.status !== 200) {
+ respond(finishAllRequest.body.error, params);
+ return;
+ }
+
+ let finishedAllResponse = getResponse("allTasksFinished");
+ params.doneCount = await completedTasksCount(user);
+
+ respond(finishedAllResponse, params);
+ return;
+ }
+
+ let finishRequest = await markTaskDone(user, message);
+
+ if (finishRequest.status !== 200) {
+ respond(finishRequest.body.error, params);
+ return;
+ }
+
+ let finishedResponse = getResponse("taskFinished");
+
+ params.task = finishRequest.body.markedTasks;
+ params.doneCount = await completedTasksCount(user);
+ params.pointCount =
+ finishRequest.body.markedTasksCount *
+ configs.settings.pointsPerTask;
+
+ if (finishRequest.body.failedTasks !== "") {
+ finishedResponse += ` | Failed to finish task(s): "${finishRequest.body.failedTasks}"`;
+ }
+
+ respond(finishedResponse, params);
+ } else if (getCommand("unfinishTaskCommands").includes(command)) {
+ let unfinishRequest = await markTaskUndone(user, message);
+
+ if (unfinishRequest.status !== 200) {
+ respond(unfinishRequest.body.error, params);
+ return;
+ }
+
+ // task unfinished
+ let unfinishedResponse = getResponse("taskUnfinished");
+
+ params.task = unfinishRequest.body.markedTasks;
+
+ if (unfinishRequest.body.failedTasks !== "") {
+ unfinishedResponse += ` | Failed to unfinish task(s): "${unfinishRequest.body.failedTasks}"`;
+ }
+
+ respond(unfinishedResponse, params);
+ } else if (getCommand("nextTaskCommands").includes(command)) {
+ let nextRequest = await nextTask(user, message);
+
+ if (nextRequest.status !== 200) {
+ respond(nextRequest.body.error, params);
+ return;
+ }
+
+ // task next
+ let nextResponse = getResponse("taskNext");
+
+ params.oldTask = nextRequest.body.oldTask;
+ params.newTask = nextRequest.body.newTask;
+
+ respond(nextResponse, params);
+ } else if (getCommand("nowTaskCommands").includes(command)) {
+ let nowRequest = await nowTask(user, extra.userColor, message);
+
+ if (nowRequest.status !== 200) {
+ respond(nowRequest.body.error, params);
+ return;
+ }
+
+ // task now
+ let nowResponse = getResponse("nowTask");
+
+ params.task = nowRequest.body.task;
+
+ respond(nowResponse, params);
+ } else if (getCommand("focusTaskCommands").includes(command)) {
+ let focusRequest = await focusTask(user, message);
+
+ if (focusRequest.status !== 200) {
+ respond(focusRequest.body.error, params);
+ return;
+ }
+
+ // task focused
+ let focusedResponse = getResponse("taskFocused");
+
+ params.task = focusRequest.body.focusedTask;
+
+ respond(focusedResponse, params);
+ } else if (getCommand("unfocusTaskCommands").includes(command)) {
+ let unfocusRequest = await unfocusTask(user);
+
+ if (unfocusRequest.status !== 200) {
+ respond(unfocusRequest.body.error, params);
+ return;
+ }
+
+ // task unfocused
+ let unfocusedResponse = getResponse("clearFocused");
+
+ respond(unfocusedResponse, params);
+ } else if (getCommand("checkCommands").includes(command)) {
+ if (message === "") {
+ let checkRequest = await checkTasks(user);
+ if (checkRequest.status !== 200) {
+ // no tasks
+ respond(checkRequest.body.error, params);
+ return;
+ }
+
+ return respond(checkRequest.body.reply, params);
+ } else {
+ let mentioned = message.replace("@", "");
+ let checkRequest = await checkTasks(mentioned);
+
+ if (checkRequest.status !== 200) {
+ // no tasks
+ respond(checkRequest.body.error, params);
+
+ return;
+ }
+ return respond(checkRequest.body.reply, params);
+ }
+ } else if (getCommand("adminDeleteCommands").includes(command)) {
+ if (!isMod(flags)) {
+ respond(getResponse("notMod"), params);
+ return;
+ }
+ let mentioned = message.replace("@", "");
+
+ if (mentioned === "") {
+ respond(getResponse("specifyUser"), params);
+ return;
+ }
+
+ let clearUserTaskResponse = await clearUserTasks(mentioned);
+
+ params.mentioned = mentioned;
+
+ if (clearUserTaskResponse.status === 0) {
+ // no tasks
+ respond(getResponse("noTaskA"), params);
+ return;
+ }
+
+ respond(getResponse("adminDeleteTasks"), params);
+ return;
+ } else if (getCommand("adminClearDoneCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ clearAllDoneTasks();
+ respond(getResponse("clearedDone"), params);
+ return;
+ } else if (getCommand("adminClearAllCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ clearAll();
+ respond(getResponse("clearedAll"), params);
+ return;
+ } else if (getCommand("clearMyDoneCommands").includes(command)) {
+ let clearOwnDoneResponse = await clearOwnDoneTasks(user);
+
+ if (clearOwnDoneResponse.status !== 200) {
+ // no tasks
+ respond(getResponse("noTask"), params);
+ return;
+ }
+
+ respond(getResponse("clearedMyDone"), params);
+ } else if (getCommand("adminClearNotStreamerCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+ await clearMemory();
+
+ await clearAllExceptStreamer(configs.StreamerUsernames);
+ respond(getResponse("clearTasksExceptBroadcaster"), params);
+ } else if (getCommand("adminClearTasksCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+ await clearMemory();
+
+ await clearAllTasks();
+ respond(getResponse("clearedTasks"), params);
+ } else if (getCommand("listCommands").includes(command)) {
+ let listTaskResponse = await listTasks(user);
+
+ if (listTaskResponse.status !== 200) {
+ // no tasks
+ respond(listTaskResponse.body.error, params);
+ return;
+ }
+
+ respond(listTaskResponse.body.reply, params);
+ } else if (getCommand("checkCountCommands").includes(command)) {
+ if (message === "") {
+ let count = await completedTasksCount(user);
+
+ params.doneCount = count;
+
+ return respond(getResponse("checkYourCount"), params);
+ } else {
+ let mentioned = message.replace("@", "");
+ let count = await completedTasksCount(mentioned);
+
+ params.doneCount = count;
+ params.mentioned = mentioned;
+
+ return respond(getResponse("checkUserCount"), params);
+ }
+ } else if (getCommand("checkAllCountCommands").includes(command)) {
+ let count = getBoardTotalTaskCount();
+
+ if (count === 0) {
+ respond(getResponse("noCountAll"), params);
+ return;
+ }
+
+ params.doneCount = count;
+
+ respond(getResponse("checkAllCount"), params);
+ } else if (getCommand("checkMyPointsCommands").includes(command)) {
+ if (message === "") {
+ let points = await getUserPoints(user);
+
+ params.pointCount = points;
+
+ return respond(getResponse("checkMyPoints"), params);
+ } else {
+ let mentioned = message.replace("@", "");
+ let points = await getUserPoints(mentioned);
+
+ params.pointCount = points;
+ params.mentioned = mentioned;
+
+ return respond(getResponse("checkUserPoints"), params);
+ }
+ } else if (getCommand("syncCountPointsCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ await syncPointsToCount();
+ respond(getResponse("syncCountPoints"), params);
+ } else if (getCommand("addPointsCommands").includes(command)) {
+ // !addpoints @user 100
+
+ if (!isMod(flags)) {
+ respond(getResponse("notMod"), params);
+ return;
+ }
+
+ let mentioned = message.split(" ")[0].replace("@", "");
+
+ if (mentioned === "") {
+ respond(getResponse("specifyUser"), params);
+ return;
+ }
+
+ let points = message.split(" ")[1];
+
+ if (points === undefined) {
+ respond(getResponse("specifyPoints"), params);
+ return;
+ }
+
+ if (!/^\d+$/.test(points)) {
+ respond(getResponse("invalidNumber"), params);
+ return;
+ }
+
+ points = parseInt(points);
+
+ await addPoints(mentioned, points);
+
+ params.mentioned = mentioned;
+ params.pointCount = points;
+
+ respond(getResponse("addPoints"), params);
+ } else if (getCommand("reducePointsCommands").includes(command)) {
+ if (!isMod(flags)) {
+ respond(getResponse("notMod"), params);
+ return;
+ }
+
+ let mentioned = message.split(" ")[0].replace("@", "");
+
+ if (mentioned === "") {
+ respond(getResponse("specifyUser"), params);
+ return;
+ }
+
+ let points = message.split(" ")[1];
+
+ if (points == undefined) {
+ respond(getResponse("specifyPoints"), params);
+ return;
+ }
+
+ if (!/^\d+$/.test(points)) {
+ respond(getResponse("invalidNumber"), params);
+ return;
+ }
+
+ await reducePoints(mentioned, points);
+
+ params.mentioned = mentioned;
+ params.pointCount = points;
+
+ respond(getResponse("reducePoints"), params);
+ } else if (getCommand("setUserPointsCommands").includes(command)) {
+ if (!isMod(flags)) {
+ respond(getResponse("notMod"), params);
+ return;
+ }
+
+ let mentioned = message.split(" ")[0].replace("@", "");
+
+ if (mentioned === "") {
+ respond(getResponse("specifyUser"), params);
+ return;
+ }
+
+ let points = message.split(" ")[1];
+
+ if (points === undefined) {
+ respond(getResponse("specifyPoints"), params);
+ return;
+ }
+
+ if (!/^\d+$/.test(points)) {
+ respond(getResponse("invalidNumber"), params);
+ return;
+ }
+
+ points = parseInt(points);
+
+ await setUserPoints(mentioned, points);
+
+ params.mentioned = mentioned;
+ params.pointCount = points;
+
+ respond(getResponse("setUserPoints"), params);
+ } else if (getCommand("setUserTaskCountCommands").includes(command)) {
+ if (!isMod(flags)) {
+ respond(getResponse("notMod"), params);
+ return;
+ }
+
+ let mentioned = message.split(" ")[0].replace("@", "");
+
+ if (mentioned === "") {
+ respond(getResponse("specifyUser"), params);
+ return;
+ }
+
+ let count = message.split(" ")[1];
+
+ if (count === undefined) {
+ respond(getResponse("specifyCount"), params);
+ return;
+ }
+
+ if (!/^\d+$/.test(count)) {
+ respond(getResponse("invalidNumber"), params);
+ return;
+ }
+
+ points = parseInt(points);
+
+ await setUserTaskCount(mentioned, count);
+
+ params.mentioned = mentioned;
+ params.pointCount = count;
+
+ respond(getResponse("setUserTaskCount"), params);
+ } else if (getCommand("leaderboardCommands").includes(command)) {
+ let leaderboardResponse = leaderboardTaskCount(5);
+
+ if (leaderboardResponse.status !== 200) {
+ respond(leaderboardResponse.body.error, params);
+ return;
+ }
+
+ let leaderboard = leaderboardResponse.body.leaderboard;
+
+ respond(leaderboard, params);
+ } else if (getCommand("adminSetBoardCountCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ // check if message is a number using regex
+ if (!/^\d+$/.test(message)) {
+ respond(getResponse("invalidNumber"), params);
+ return;
+ }
+
+ params.count = message;
+
+ await setTotalCompleteCount(message);
+
+ respond(getResponse("setBoardCount"), params);
+ } else if (getCommand("adminResetBoardCountCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ await resetBoardCount();
+ respond(getResponse("clearedBoardCount"), params);
+ } else if (getCommand("adminResetUsersCountCommands").includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ await resetUsersCount();
+ respond(getResponse("clearedUsersCount"), params);
+ } else if (getCommand("TaskMasterCommands")) {
+ let champion = await getTaskMasterChampion();
+
+ if (champion === "") {
+ respond(getResponse("noTaskMaster"), params);
+ return;
+ }
+
+ params.taskMaster = champion.username;
+ params.taskMasterCount = champion.count;
+
+ respond(getResponse("taskMaster"), params);
+ } else if (getCommand("helpCommands").includes(command)) {
+ respond(getResponse("help"), params);
+ } else if (command === "!clearlocalstorage") {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ clearLocalStorage();
+
+ respond(getResponse("clearLocalStorage"), params);
+ } else if (["!transferdata"].includes(command)) {
+ if (!isStreamer(flags)) {
+ respond(getResponse("notStreamer"), params);
+ return;
+ }
+
+ await transferLocalStorageToIndexedDB();
+ } else if (commands.additionalCommands[command]) {
+ respond(commands.additionalCommands[command], params);
+ } else {
+ // command not found
+ }
+}
diff --git a/scripts/taskList.js b/scripts/taskList.js
index 67b6936..1c6700d 100644
--- a/scripts/taskList.js
+++ b/scripts/taskList.js
@@ -12,6 +12,13 @@ DB structure:
- completeCount
- points
- totalCompleteCount
+
+- taskmaster
+ - users
+ - [username]:
+ - completeCount
+ - totalCompleteCount
+ - startDate
*/
const settings = configs.settings;
@@ -152,6 +159,7 @@ function convertToCSSVar(name) {
let cssVar = name.replace(/([A-Z])/g, "-$1").toLowerCase();
return `--${cssVar}`;
}
+
/**
* Converts a hexadecimal color value to its RGB equivalent.
*
@@ -189,18 +197,60 @@ function hexToRgb(hex) {
}
/**
- * Returns the current month and year.
+ * adds a count to user for 'taskmaster'
*
- * @returns {Object} An object containing the current month as a number and the current year as a number.
+ * @param {string} username
*/
-function getMonthYear() {
- let date = new Date();
- let month = date.toLocaleString("default", { month: "numeric" });
- let year = date.getFullYear();
- return {
- month: month,
- year: year,
+async function addCountToTaskMasterUser(username, count = 1) {
+ const taskmaster = (await DBHandler.get("taskmaster")) || {
+ users: {},
+ startDate: new Date(),
+ totalCompleteCount: 0,
};
+
+ if (!taskmaster.users[username.toLowerCase()]) {
+ taskmaster.users[username.toLowerCase()] = {
+ completeCount: 0,
+ };
+ }
+
+ taskmaster.users[username.toLowerCase()].completeCount += count;
+
+ await DBHandler.set("taskmaster", taskmaster);
+}
+
+/**
+ * gets the count of a user from 'taskmaster'
+ *
+ * @param {string} username
+ * @returns {number} the count of the user
+ */
+async function getUserTaskMasterCount(username) {
+ const taskmaster = await DBHandler.get("taskmaster");
+
+ if (!taskmaster.users[username.toLowerCase()]) {
+ return 0;
+ }
+
+ return taskmaster.users[username.toLowerCase()].completeCount;
+}
+
+async function getTaskMasterChampion() {
+ const taskmaster = await DBHandler.get("taskmaster");
+
+ let champion = {
+ username: "",
+ count: 0,
+ };
+
+ for (const user in taskmaster.users) {
+ if (taskmaster.users[user].completeCount > champion.count) {
+ champion.username = user;
+ champion.count = taskmaster.users[user].completeCount;
+ }
+ }
+
+ return champion;
}
/**
@@ -410,6 +460,9 @@ async function addDoneCount(username, value) {
counts.users[username.toLowerCase()].points +=
value * settings.pointsPerTask;
+ // add to taskmaster
+ addCountToTaskMasterUser(username, value);
+
await DBHandler.set("counts", counts);
}
diff --git a/styles/taskList.css b/styles/taskList.css
index a3f4552..94b0a43 100644
--- a/styles/taskList.css
+++ b/styles/taskList.css
@@ -44,6 +44,10 @@
box-sizing: border-box;
}
+body {
+ background: gray;
+}
+
#main-container {
width: 100%;
height: 100vh;