This commit is contained in:
JandereDev 2022-05-08 09:14:11 +02:00
parent bb79b9d4ab
commit 42cb2d7f59
Signed by: Lea
GPG key ID: 5D5E18ACB990F57A
3 changed files with 56 additions and 0 deletions

View file

@ -0,0 +1,49 @@
// Quick and dirty hack for https://github.com/revoltchat/revite/issues/609
// We periodically poll the `ready` WS event by creating a new client and compare
// the cached server count. If a new server is found, the original client reconnects
// and emits the `member/join` event for itself afterwards.
import { Client } from "@janderedev/revolt.js";
import { client } from "../..";
import logger from "../logger";
import { awaitClient } from "../util";
awaitClient().then(async () => {
setInterval(async () => {
logger.debug('Checking for unknown servers');
const knownServers = Array.from(client.servers.keys());
const tmpClient = new Client({
...client.options,
});
tmpClient.loginBot(process.env['BOT_TOKEN']!);
tmpClient.once('ready', async () => {
const tmpServers = Array.from(tmpClient.servers.keys());
if (tmpServers.length != knownServers.length) {
logger.warn('New unknown server(s) detected');
client.websocket.disconnect();
client.websocket.connect();
client.once('connected', async () => {
console.info('Client reconnected');
for (const id of tmpServers) {
if (!knownServers.includes(id)) {
try {
const server = client.servers.get(id) || await client.servers.fetch(id);
const member = server.member;
if (!member) continue;
client.emit('member/join', member);
} catch(e) {
console.error(e);
}
}
}
});
}
tmpClient.websocket.disconnect();
});
}, 1000 * 15);
});

View file

@ -346,6 +346,11 @@ function dedupeArray<T>(...arrays: T[][]): T[] {
return found;
}
const awaitClient = () => new Promise<void>(async resolve => {
if (!client.user) client.once('ready', () => resolve());
else resolve();
});
export {
getAutumnURL,
hasPerm,
@ -363,6 +368,7 @@ export {
sendLogMessage,
embed,
dedupeArray,
awaitClient,
EmbedColor,
NO_MANAGER_MSG,
ULID_REGEX,

View file

@ -68,4 +68,5 @@ logger.info(`\
import('./bot/modules/metrics');
import('./bot/modules/bot_status');
import('./bot/modules/fetch_all');
import('./bot/modules/event_fix');
})();