add bot status, fetch all users on startup
This commit is contained in:
parent
7a7ffcc805
commit
026b81645f
3 changed files with 73 additions and 0 deletions
52
bot/src/bot/modules/bot_status.ts
Normal file
52
bot/src/bot/modules/bot_status.ts
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import axios from "axios";
|
||||||
|
import { client, dbs } from "../..";
|
||||||
|
import logger from "../logger";
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
if (!client.user) await new Promise<void>(r => client.once('ready', () => r()));
|
||||||
|
const interval = process.env['BOT_STATUS_INTERVAL']; // In seconds
|
||||||
|
const statuses = process.env['BOT_STATUS']
|
||||||
|
?.split('||')
|
||||||
|
.map(text => text.trim());
|
||||||
|
|
||||||
|
if (statuses?.length && interval) {
|
||||||
|
let i = 0;
|
||||||
|
|
||||||
|
const update = async () => {
|
||||||
|
try {
|
||||||
|
const statusText = statuses[i]
|
||||||
|
.replace('{{servers}}', `${client.servers.size}`)
|
||||||
|
.replace('{{users}}', `${client.users.size}`)
|
||||||
|
.replace('{{infractions_total}}', `${await dbs.INFRACTIONS.count({})}`)
|
||||||
|
.replace('{{ping_ms}}', `${client.websocket.ping ?? -1}`);
|
||||||
|
|
||||||
|
await setStatus(statusText, 'Online');
|
||||||
|
logger.debug(`Bot status updated`);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
if (i >= statuses.length) i = 0;
|
||||||
|
} catch(e) {
|
||||||
|
console.error(`Failed to update bot status: ${e}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update();
|
||||||
|
setInterval(update, parseInt(interval) * 1000);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
async function setStatus(text: string, presence: 'Online'|'Idle'|'Busy'|'Invisible') {
|
||||||
|
await axios.patch(
|
||||||
|
`${client.apiURL}/users/@me`,
|
||||||
|
{
|
||||||
|
status: { text, presence }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'x-bot-token': process.env['BOT_TOKEN']!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export { setStatus }
|
19
bot/src/bot/modules/fetch_all.ts
Normal file
19
bot/src/bot/modules/fetch_all.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import { client } from "../..";
|
||||||
|
import logger from "../logger";
|
||||||
|
|
||||||
|
// Fetch all known users on bot startup.
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
if (!client.user) await new Promise<void>(r => client.once('ready', () => r()));
|
||||||
|
|
||||||
|
logger.info(`Starting to fetch users in ${client.servers.size} servers.`);
|
||||||
|
|
||||||
|
const promises: Promise<any>[] = [];
|
||||||
|
for (const server of client.servers) {
|
||||||
|
promises.push(server[1].fetchMembers());
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await Promise.allSettled(promises);
|
||||||
|
logger.done(`Downloaded all users from ${res.filter(r => r.status == 'fulfilled').length} servers `
|
||||||
|
+ `with ${res.filter(r => r.status == 'rejected').length} errors. Cache size: ${client.users.size}`);
|
||||||
|
})();
|
|
@ -50,4 +50,6 @@ export { client, dbs }
|
||||||
import('./bot/modules/user_scan');
|
import('./bot/modules/user_scan');
|
||||||
import('./bot/modules/api_communication');
|
import('./bot/modules/api_communication');
|
||||||
import('./bot/modules/metrics');
|
import('./bot/modules/metrics');
|
||||||
|
import('./bot/modules/bot_status');
|
||||||
|
import('./bot/modules/fetch_all');
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in a new issue