Fix various issues

This commit is contained in:
polypixeldev 2023-09-03 20:18:06 -04:00
parent 7c58140511
commit 60ca079fa0
No known key found for this signature in database
GPG key ID: 8B650055D47BA096
9 changed files with 810 additions and 1551 deletions

View file

@ -1,7 +0,0 @@
{"name":"drag-in-files.svg","date":"2016-10-22T16:17:49.954Z","url":"https://cdn.hyperdev.com/drag-in-files.svg","type":"image/svg","size":7646,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/drag-in-files.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(102, 153, 205)","uuid":"adSBq97hhhpFNUna"}
{"name":"click-me.svg","date":"2016-10-23T16:17:49.954Z","url":"https://cdn.hyperdev.com/click-me.svg","type":"image/svg","size":7116,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/click-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(243, 185, 186)","uuid":"adSBq97hhhpFNUnb"}
{"name":"paste-me.svg","date":"2016-10-24T16:17:49.954Z","url":"https://cdn.hyperdev.com/paste-me.svg","type":"image/svg","size":7242,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/paste-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(42, 179, 185)","uuid":"adSBq97hhhpFNUnc"}
{"uuid":"adSBq97hhhpFNUna","deleted":true}
{"uuid":"adSBq97hhhpFNUnb","deleted":true}
{"uuid":"adSBq97hhhpFNUnc","deleted":true}
{"name":"botdemo.png","date":"2020-07-17T01:20:39.444Z","url":"https://cdn.glitch.com/95c2faf1-779e-4e08-b219-8a122cdceefe%2Fbotdemo.png","type":"image/png","size":65589,"imageWidth":842,"imageHeight":290,"thumbnail":"https://cdn.glitch.com/95c2faf1-779e-4e08-b219-8a122cdceefe%2Fthumbnails%2Fbotdemo.png","thumbnailWidth":330,"thumbnailHeight":114,"uuid":"7cdZLaCux0c3Mte2"}

76
.replit
View file

@ -1,76 +0,0 @@
entrypoint = "index.js"
hidden = [".config"]
run = "node api/app.js"
[[hints]]
regex = "Error \\[ERR_REQUIRE_ESM\\]"
message = "We see that you are using require(...) inside your code. We currently do not support this syntax. Please use 'import' instead when using external modules. (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import)"
[nix]
channel = "stable-21_11"
[env]
PATH = "/home/runner/$REPL_SLUG/.config/npm/node_global/bin:/home/runner/$REPL_SLUG/node_modules/.bin"
XDG_CONFIG_HOME = "/home/runner/.config"
npm_config_prefix = "/home/runner/$REPL_SLUG/.config/npm/node_global"
[gitHubImport]
requiredFiles = [".replit", "replit.nix", ".config"]
[packager]
language = "nodejs"
[packager.features]
packageSearch = true
guessImports = true
enabledForHosting = false
[unitTest]
language = "nodejs"
[languages.javascript]
pattern = "**/{*.js,*.jsx,*.ts,*.tsx}"
[languages.javascript.languageServer]
start = "typescript-language-server --stdio"
[debugger]
support = true
[debugger.interactive]
transport = "localhost:0"
startCommand = [ "dap-node" ]
[debugger.interactive.initializeMessage]
command = "initialize"
type = "request"
[debugger.interactive.initializeMessage.arguments]
clientID = "replit"
clientName = "replit.com"
columnsStartAt1 = true
linesStartAt1 = true
locale = "en-us"
pathFormat = "path"
supportsInvalidatedEvent = true
supportsProgressReporting = true
supportsRunInTerminalRequest = true
supportsVariablePaging = true
supportsVariableType = true
[debugger.interactive.launchMessage]
command = "launch"
type = "request"
[debugger.interactive.launchMessage.arguments]
args = []
console = "externalTerminal"
cwd = "."
environment = []
pauseForSourceMap = false
program = "./index.js"
request = "launch"
sourceMaps = true
stopOnEntry = false
type = "pwa-node"

View file

@ -1,2 +0,0 @@
language = "nodejs"
run = "node api/app.js"

View file

@ -1,21 +1,21 @@
// Require the Bolt package (github.com/slackapi/bolt)
const { App } = require("@slack/bolt"); const { App } = require("@slack/bolt");
// const keep_alive = require('./keep_alive.js');
const addQuotes = require('./quotes.js'); const addQuotes = require('./quotes.js');
const schedule = require('node-schedule'); const schedule = require('node-schedule');
const moment = require('moment'); const moment = require('moment');
const token = process.env.SLACK_BOT_TOKEN;
const channel = "CDJMS683D";
const Airtable = require('airtable'); const Airtable = require('airtable');
require('dotenv').config();
Airtable.configure({ Airtable.configure({
endpointUrl: 'https://api.airtable.com', endpointUrl: 'https://api.airtable.com',
apiKey: process.env.AIRTABLE_API_KEY apiKey: process.env.AIRTABLE_API_KEY
}); });
const base = Airtable.base('appogmRaVRo5ElVH7'); const base = Airtable.base(process.env.AIRTABLE_BASE_ID);
let speedArr = [];
let latest;
const goalDate = '10/31/2023'; const token = process.env.SLACK_BOT_TOKEN;
const channel = process.env.SLACK_MILLION_CHANNEL;
const port = process.env.PORT ?? 3000;
const goalDate = '12/31/2023';
const goalNumber = 300000; const goalNumber = 300000;
const app = new App({ const app = new App({
@ -78,7 +78,7 @@ async function fetchOldest(id) {
async function publishMessage(id, text) { async function publishMessage(id, text) {
try { try {
const result = await app.client.chat.postMessage({ await app.client.chat.postMessage({
token: token, token: token,
channel: id, channel: id,
text: text text: text
@ -90,7 +90,7 @@ async function publishMessage(id, text) {
async function postReaction(id, emoji, ts) { async function postReaction(id, emoji, ts) {
try { try {
const result = await app.client.reactions.add({ await app.client.reactions.add({
token: token, token: token,
channel: id, channel: id,
name: emoji, name: emoji,
@ -103,7 +103,7 @@ async function postReaction(id, emoji, ts) {
async function pinMessage(id, ts) { async function pinMessage(id, ts) {
try { try {
const result = await app.client.pins.add({ await app.client.pins.add({
token: token, token: token,
channel: id, channel: id,
timestamp: ts timestamp: ts
@ -113,21 +113,12 @@ async function pinMessage(id, ts) {
} }
} }
function findMean(arr) {
let totalSum = 0;
for (let i of arr) {
totalSum += i;
}
return totalSum / arr.length;
}
async function addData(db, object) { async function addData(db, object) {
base(db).create(object, function(err, record) { base(db).create(object, function(err, record) {
if (err) { if (err) {
console.error(err); console.error(err);
return; return;
} }
// console.log(record.getId());
}) })
} }
@ -143,30 +134,24 @@ async function getAverage() {
let sum = 0; let sum = 0;
obj.forEach((item) => (sum += item.fields.increase)); obj.forEach((item) => (sum += item.fields.increase));
return sum / 30; return sum / obj.length;
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
} }
async function report() { async function report() {
console.log("Writing daily report...");
let oldest = await fetchOldest(channel); let oldest = await fetchOldest(channel);
let latest = await fetchLatest(channel); let latest = await fetchLatest(channel);
let diff = latest - oldest; let diff = latest - oldest;
addData('increase', { addData('increase', {
"Date": moment().subtract(1, "days").format("YYYY-MM-DD"), "Date": moment().subtract(1, "days").format("YYYY-MM-DD"),
"increase": diff, "increase": diff,
"stats": [
"rec2XI8QAsPr7EMVB"
],
"start": oldest, "start": oldest,
}) })
let averageSpeed = await getAverage(); let averageSpeed = await getAverage();
let thousandsGoal = Math.ceil(latest / 1000) * 1000;
let thousandsTime = predictTime(thousandsGoal, latest, averageSpeed);
// let tenThousandsGoal = Math.ceil(latest / 5000) * 5000;
let pastThousandsGoal = Math.floor(latest / 1000) * 1000; let pastThousandsGoal = Math.floor(latest / 1000) * 1000;
// let tenThousandsTime = predictTime(tenThousandsGoal, latest, averageSpeed);
let goals = predictSpeed(goalDate, goalNumber, latest); let goals = predictSpeed(goalDate, goalNumber, latest);
let message = let message =
`Today we've went from *${oldest}* to *${latest}*! `Today we've went from *${oldest}* to *${latest}*!
@ -178,20 +163,13 @@ async function report() {
if (pastThousandsGoal > oldest && pastThousandsGoal <= latest) { if (pastThousandsGoal > oldest && pastThousandsGoal <= latest) {
let messageWithCelebration = `:tada: Congratulations! We've went past ${pastThousandsGoal}! :tada: \n` + message; let messageWithCelebration = `:tada: Congratulations! We've went past ${pastThousandsGoal}! :tada: \n` + message;
publishMessage(channel, addQuotes(messageWithCelebration, goals, averageSpeed)); publishMessage(channel, addQuotes(messageWithCelebration, goals, averageSpeed));
// publishMessage('C017W4PHYKS', addQuotes(messageWithCelebration, goals, averageSpeed));
} else { } else {
publishMessage(channel, addQuotes(message, goals, averageSpeed)); publishMessage(channel, addQuotes(message, goals, averageSpeed));
// publishMessage('C017W4PHYKS', addQuotes(message, goals, averageSpeed));
} }
console.log("Sent daily report.");
}; };
function predictTime(goal, recent, averageSpeed) {
let daysLeft = (goal - recent) / averageSpeed;
let unix = new Date(Date.now() + daysLeft * 86400000);
return moment(unix).fromNow();
}
function predictSpeed(goalDate, goalNumber, currentNumber) { function predictSpeed(goalDate, goalNumber, currentNumber) {
let today = new Date(); let today = new Date();
let goal = new Date(goalDate); let goal = new Date(goalDate);
@ -205,7 +183,6 @@ function predictSpeed(goalDate, goalNumber, currentNumber) {
app.event('message', async (body) => { app.event('message', async (body) => {
try { try {
let e = body.event; let e = body.event;
console.log(e);
if (typeof e.subtype === "undefined" && /\d/.test(e.text[0])) { if (typeof e.subtype === "undefined" && /\d/.test(e.text[0])) {
let number = extractNumber(e.text); let number = extractNumber(e.text);
let ts = e.ts; let ts = e.ts;
@ -216,7 +193,6 @@ app.event('message', async (body) => {
if (number % 5000 === 0) { if (number % 5000 === 0) {
pinMessage(c, ts); pinMessage(c, ts);
} }
let l = number.length;
if (number.slice(-2) === '69') { if (number.slice(-2) === '69') {
postReaction(c, "ok_hand", ts); postReaction(c, "ok_hand", ts);
} }
@ -244,20 +220,21 @@ app.event('app_mention', async (body) => {
"What is it? Are you going too slow that you need another supernatural being to help you _speed-count_? If so, you've found the wrong one, because this supernatural being is _trying to sleep!_", "What is it? Are you going too slow that you need another supernatural being to help you _speed-count_? If so, you've found the wrong one, because this supernatural being is _trying to sleep!_",
"HISSSSSSSSSSS!", "HISSSSSSSSSSS!",
"Minions, I had _three hours_ of sleep yesterday, and I am trying to catch up. Please, _leave me alone to sleep._", "Minions, I had _three hours_ of sleep yesterday, and I am trying to catch up. Please, _leave me alone to sleep._",
] ];
publishMessage(c, messageArray[choose]) publishMessage(c, messageArray[choose]);
console.log("App mentioned.");
} catch (err) { } catch (err) {
console.error(err) console.error(err)
} }
}); });
(async (req, res) => { (async () => {
// Start your app
try { try {
await app.start(process.env.PORT || 3000); await app.start(port);
let j = schedule.scheduleJob('0 0 * * *', report); schedule.scheduleJob('0 0 * * *', report);
// let j = schedule.scheduleJob('*/15 * * * * *', report); console.log(`Started bot, listening on port ${port}`)
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }

View file

@ -22,7 +22,7 @@ let regularEndQuotes = [
function addQuotes(message, rawGoals, rawSpeed) { function addQuotes(message, rawGoals, rawSpeed) {
let start = regularStartQuotes[Math.floor(Math.random() * regularStartQuotes.length)] let start = regularStartQuotes[Math.floor(Math.random() * regularStartQuotes.length)]
let end; let end =regularEndQuotes[Math.floor(Math.random() * regularEndQuotes.length)];
let goals = Math.ceil(rawGoals[1]); let goals = Math.ceil(rawGoals[1]);
let days = rawGoals[0]; let days = rawGoals[0];
let speed = Math.round(rawSpeed); let speed = Math.round(rawSpeed);
@ -36,7 +36,6 @@ function addQuotes(message, rawGoals, rawSpeed) {
} else if (diff > 1000) { } else if (diff > 1000) {
end = `You're slogging behind, my minions! Only *${speed}* a day? RiDONKulous! Get that speed up to at least *+${goals}* to get there on time! Hurry up!!! You have *${days}* days left to get there!` end = `You're slogging behind, my minions! Only *${speed}* a day? RiDONKulous! Get that speed up to at least *+${goals}* to get there on time! Hurry up!!! You have *${days}* days left to get there!`
} }
// let end = regularEndQuotes[Math.floor(Math.random() * regularEndQuotes.length)]
return start + "\n" + message + "\n" + end; return start + "\n" + message + "\n" + end;
} }

1156
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -9,6 +9,7 @@
"dependencies": { "dependencies": {
"@slack/bolt": "^3.3.0", "@slack/bolt": "^3.3.0",
"airtable": "^0.11.0", "airtable": "^0.11.0",
"dotenv": "^16.3.1",
"moment": "^2.29.1", "moment": "^2.29.1",
"node-schedule": "^2.0.0" "node-schedule": "^2.0.0"
}, },

View file

@ -1,8 +0,0 @@
{ pkgs }: {
deps = [
pkgs.nodejs-12_x
pkgs.nodePackages.typescript-language-server
pkgs.yarn
pkgs.replitPackages.jest
];
}

File diff suppressed because it is too large Load diff