-
Notifications
You must be signed in to change notification settings - Fork 0
/
handleNewPatch.js
83 lines (71 loc) · 2.72 KB
/
handleNewPatch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
const { ThreadAutoArchiveDuration, hyperlink, ButtonBuilder, ButtonStyle, ActionRowBuilder } = require('discord.js');
const { SovBot } = require('../../../SovBot');
/**
* Creates a new forum post for discussing the patch.
* @param patch JSON object of patch from Riot.
* @param oldThreadId ThreadId of the forum post for the last patch.
* @returns {Promise<ThreadChannel<boolean>>}
*/
async function createPost(patch, oldThreadId) {
// #val-discussion = 1047249775180927026
const channel = SovBot.channels.cache.get('1047249775180927026');
const oldThread = await channel.threads.fetch(oldThreadId);
await oldThread.setArchived(true);
return await channel.threads.create({
name: patch.title,
message: {
content: `https://playvalorant.com/en-us${patch.url.url}`,
},
appliedTags: ['1047250886772138114'],
autoArchiveDuration: ThreadAutoArchiveDuration.OneWeek,
});
}
/**
* Updates the single patch-post document to reflect the new post.
* @param patchPostDoc Unmodified patch-post document.
* @param newPost Newly created forum post for the patch.
* @param patch JSON object of patch from Riot.
* @returns {Promise<void>}
*/
async function updatePatchDatabase(patchPostDoc, newPost, patch) {
patchPostDoc.date = patch.date;
patchPostDoc.threadId = newPost.id;
await patchPostDoc.save();
}
/**
* Mentions the relevant role that this patch has been created.
* @param post Newly created forum post for the patch.
* @returns {Promise<void>}
*/
async function announcePost(post) {
// #content = 988509424089956374
const channel = SovBot.channels.cache.get('988509424089956374');
const toggleRoleButton = new ButtonBuilder()
.setCustomId('button-toggle-role-988549968073740389')
.setLabel('Toggle notifications')
.setStyle(ButtonStyle.Secondary)
.setEmoji('<:blobclipboard:1029449759422951485>');
const forumLinkButton = new ButtonBuilder()
.setLabel('Take me there!')
.setURL(post.url)
.setStyle(ButtonStyle.Link);
const row = new ActionRowBuilder()
.addComponents(toggleRoleButton, forumLinkButton);
await channel.send({
content: `<:blobgamer:1029449772957970432> Hey <@&988549968073740389>, ${post.name} just dropped!\nSee what others think in ${hyperlink(post.name, `<${post.url}>`)}!`,
components: [row],
});
}
/**
* Calls all the required tasks when a new patch has released.
* @param newPatches JSON object of patch(es) from Riot.
* @param patchPostDoc Unmodified patch-post document.
* @returns {Promise<void>}
*/
module.exports = async function handleNewPatch(newPatches, patchPostDoc) {
for (const patch of newPatches) {
const newPatchPost = await createPost(patch, patchPostDoc.threadId);
await updatePatchDatabase(patchPostDoc, newPatchPost, patch);
await announcePost(newPatchPost);
}
};