Skip to content

Commit 26c2722

Browse files
authored
Discord chunks (#18)
* Fix typo * Automatically send chunks to discord. * Fix typo
1 parent a67abae commit 26c2722

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

functions/src/config/discord.ts

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,29 @@ export class Discord {
3030

3131
static async sendMessage(
3232
channelId: string,
33-
message: Eris.MessageContent,
33+
messageContent: Eris.MessageContent,
3434
files: Eris.MessageFile | Eris.MessageFile[] | undefined = undefined,
3535
): Promise<boolean> {
36+
let success = false;
3637
try {
37-
const i = await this.getInstance();
38+
const discord = await this.getInstance();
39+
40+
if (typeof messageContent === 'string') {
41+
for (const message of Discord.splitMessage(messageContent)) {
42+
await discord.createMessage(channelId, message, files);
43+
}
44+
} else {
45+
await discord.createMessage(channelId, messageContent, files);
46+
}
3847

39-
// Todo - retry mechanism
40-
await i.createMessage(channelId, message, files);
41-
await this.disconnect();
42-
return true;
48+
success = true;
4349
} catch (err) {
4450
firebase.logger.error('An error occurred while trying to send a message to discord.', err);
45-
return false;
51+
} finally {
52+
await this.disconnect();
4653
}
54+
55+
return success;
4756
}
4857

4958
static async getInstance(): Promise<Eris.Client> {
@@ -84,4 +93,30 @@ export class Discord {
8493
instance.disconnect({ reconnect: false });
8594
instance = null;
8695
}
96+
97+
static splitMessage(message: string, maxMessageSize: number = 1950): Array<string> {
98+
const numberOfMessages = Math.ceil(message.length / maxMessageSize);
99+
const messages: Array<string> = new Array<string>(numberOfMessages);
100+
101+
for (let i = 0, pointer = 0; i < numberOfMessages; i++) {
102+
let messageSize = maxMessageSize;
103+
104+
let prefix = '';
105+
if (i !== 0) {
106+
prefix = '...';
107+
messageSize -= 3;
108+
}
109+
110+
let suffix = '';
111+
if (i !== numberOfMessages - 1) {
112+
suffix = '...';
113+
messageSize -= 3;
114+
}
115+
116+
messages[i] = `${prefix}${message.substr(pointer, messageSize)}${suffix}`;
117+
pointer += messageSize;
118+
}
119+
120+
return messages;
121+
}
87122
}

functions/src/logic/ingestRepoVersions/updateDatabase.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export const updateDatabase = async (ingestedInfoList: RepoVersionInfo[]): Promi
3434
await RepoVersionInfo.createMany(newVersions);
3535
message += `
3636
${newVersions.length} new repository ${plural(newVersions.length)} detected.
37-
(${newVersions.map((version) => version.version).join(', ')}`;
37+
(${newVersions.map((version) => version.version).join(', ')})`;
3838
}
3939

4040
if (updatedVersions.length >= 1) {

functions/src/logic/ingestUnityVersions/updateDatabase.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export const updateDatabase = async (ingestedInfoList: EditorVersionInfo[]): Pro
3434
await EditorVersionInfo.createMany(newVersions);
3535
message += `
3636
${newVersions.length} new Unity editor ${plural(newVersions.length)} detected.
37-
(${newVersions.map((version) => version.version).join(', ')}`;
37+
(${newVersions.map((version) => version.version).join(', ')})`;
3838
}
3939

4040
if (updatedVersions.length >= 1) {

0 commit comments

Comments
 (0)