Fix various issues
This commit is contained in:
parent
7c58140511
commit
60ca079fa0
9 changed files with 810 additions and 1551 deletions
|
@ -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
76
.replit
|
@ -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"
|
|
|
@ -1,2 +0,0 @@
|
||||||
language = "nodejs"
|
|
||||||
run = "node api/app.js"
|
|
67
api/app.js
67
api/app.js
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1044
package-lock.json
generated
1044
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -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"
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
{ pkgs }: {
|
|
||||||
deps = [
|
|
||||||
pkgs.nodejs-12_x
|
|
||||||
pkgs.nodePackages.typescript-language-server
|
|
||||||
pkgs.yarn
|
|
||||||
pkgs.replitPackages.jest
|
|
||||||
];
|
|
||||||
}
|
|
1041
shrinkwrap.yaml
1041
shrinkwrap.yaml
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue