Compare commits

...

3 commits

Author SHA1 Message Date
8d8bd0fbb8 Add "webhook" storage method
this methods allows for storing messageIDs in Discord message
2024-02-21 18:03:45 +01:00
a34b52e1d0 Add missing set check 2024-02-21 17:58:58 +01:00
b7ff0eaea5 Allow user to select paths to where to store files 2024-02-21 17:15:21 +01:00
5 changed files with 96 additions and 11 deletions

View file

@ -8,14 +8,24 @@ inputs:
webhook:
description: "Discord webhook url to use"
required: true
outputFileLocation:
description: "Where to write a file containing current message ids for this run"
default: "./messageIDs.txt"
storageMethod:
description: |-
Method of storing old message ids to delete
one of:
- none - doesn't store ids of sent messages
- git - stores ids in git repository
- webhook - stores in message sent by another webhook
default: none
required: true
storegeGitFileLocation:
description: "Where in git repository file should be saved"
storageWebhookUrl:
description: "Webhook url used to send and read message containing messageIDs"
storageWebhookMessageID:
description: "Message ID to read and edit"
runs:
using: node20

44
dist/index.js vendored
View file

@ -129058,6 +129058,7 @@ async function main() {
if (presentMessages.length !== messageBlocks.length) {
core.info("number of message blocks is different, sending messages");
core.debug(`read "blocks": ${messageBlocks.length}, number of read messages: ${presentMessages.length}`);
shouldPostMessages = true;
}
if (!shouldPostMessages)
for (let i = 0; i < messageBlocks.length; i++) {
@ -129103,9 +129104,9 @@ async function main() {
}
const messageIDsConcatenated = messageIDs.join("\n");
core.info(`Messages sent! IDs:\n${messageIDsConcatenated}`);
await promises_1.default.writeFile("./messageIDs.txt", messageIDsConcatenated);
await promises_1.default.writeFile(core.getInput("outputFileLocation"), messageIDsConcatenated);
await Promise.all([
storage_1.default.pushMessageIDs(),
storage_1.default.pushMessageIDs(messageIDs),
presentMessageIds.map(v => client.deleteMessage(v)),
].flat());
}
@ -129153,6 +129154,7 @@ exports.pushMessageIDs = exports.getMessageIDs = void 0;
const promises_1 = __importDefault(__nccwpck_require__(93977));
const core = __importStar(__nccwpck_require__(42186));
const exec_1 = __nccwpck_require__(71514);
const discord_js_1 = __nccwpck_require__(85973);
function exec(command, options) {
const splitted = command.trim().split(/ +/g);
if (splitted.length === 0)
@ -129162,6 +129164,11 @@ function exec(command, options) {
function getStorageMethod() {
return core.getInput("storageMethod", { required: true });
}
function getStorageWebhook() {
return new discord_js_1.WebhookClient({
url: core.getInput("storageWebhookUrl", { required: true }),
});
}
/** @returns array of messageIDs */
async function getMessageIDs() {
const method = getStorageMethod();
@ -129169,7 +129176,7 @@ async function getMessageIDs() {
case "none":
return [];
case "git":
return promises_1.default.readFile("./messageIDs.txt")
return promises_1.default.readFile(core.getInput("storageGitFileLocation"))
.then(v => v.toString().trim().split("\n"))
.catch(e => {
core.warning("Couldn't read messageIDs");
@ -129177,23 +129184,50 @@ async function getMessageIDs() {
core.warning("Continuing anyway");
return [];
});
case "webhook":
return getStorageWebhook()
.fetchMessage(core.getInput("storageWebhookMessageID"))
.then(v => v.content.split(", "))
.catch(e => {
core.warning("Couldn't read messageIDs");
return [];
});
default:
throw new Error(`Storage method is unknown: ${method}`);
}
}
exports.getMessageIDs = getMessageIDs;
async function pushMessageIDs() {
async function pushMessageIDs(messageIDs) {
const method = getStorageMethod();
switch (method) {
case "git":
const gitFileLocation = core.getInput("storageGitFileLocation", { required: true });
await promises_1.default.copyFile(core.getInput("outputFileLocation"), gitFileLocation);
await exec("git config --global user.name \"Actions\"");
await exec("git config --global user.email \"noreply@users.noreply.github.com\"");
await exec("git add ./messageIDs.txt");
await exec(`git add ${gitFileLocation}`);
await (0, exec_1.exec)("git", ["commit", "-m", "Update stored messageIDs"]);
await exec("git push");
return true;
case "none":
return false;
case "webhook":
const content = messageIDs.join(", ");
try {
const id = core.getInput("storageWebhookMessageID");
if (id === "" || isNaN(Number(id)))
throw new Error("Invalid argument provided for storageWebhookMessageID");
await getStorageWebhook().editMessage(core.getInput("storageWebhookMessageID"), content);
core.info("Message for storage edited!");
}
catch (e) {
core.warning("Couldn't edit storage message");
core.warning(e);
core.warning("Sending a new storage message");
const message = await getStorageWebhook().send(messageIDs.join(", "));
core.info(`Message for storage sent! ID: ${message.id}`);
}
return true;
default:
throw new Error(`Storage method is unknown: ${method}`);
}

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View file

@ -49,6 +49,7 @@ async function main() {
if (presentMessages.length !== messageBlocks.length) {
core.info("number of message blocks is different, sending messages");
core.debug(`read "blocks": ${messageBlocks.length}, number of read messages: ${presentMessages.length}`);
shouldPostMessages = true;
}
if (!shouldPostMessages) for (let i = 0; i < messageBlocks.length; i++) {
// FIXME: discord may strip special unicode characters, making strings different
@ -98,10 +99,10 @@ async function main() {
const messageIDsConcatenated = messageIDs.join("\n");
core.info(`Messages sent! IDs:\n${messageIDsConcatenated}`);
await fs.writeFile("./messageIDs.txt", messageIDsConcatenated);
await fs.writeFile(core.getInput("outputFileLocation"), messageIDsConcatenated);
await Promise.all([
storage.pushMessageIDs(),
storage.pushMessageIDs(messageIDs),
presentMessageIds.map(v => client.deleteMessage(v)),
].flat()
);

View file

@ -2,6 +2,7 @@ import fs from "node:fs/promises";
import * as core from "@actions/core";
import { exec as _exec, type ExecOptions } from "@actions/exec";
import { WebhookClient } from "discord.js";
function exec(command: string, options?: ExecOptions) {
const splitted = command.trim().split(/ +/g);
@ -14,6 +15,12 @@ function getStorageMethod(): string {
return core.getInput("storageMethod", {required: true})
}
function getStorageWebhook(): WebhookClient {
return new WebhookClient({
url: core.getInput("storageWebhookUrl", { required: true }),
});
}
/** @returns array of messageIDs */
export async function getMessageIDs(): Promise<string[]> {
const method = getStorageMethod();
@ -21,7 +28,7 @@ export async function getMessageIDs(): Promise<string[]> {
case "none":
return [];
case "git":
return fs.readFile("./messageIDs.txt")
return fs.readFile(core.getInput("storageGitFileLocation"))
.then(v => v.toString().trim().split("\n"))
.catch(e => {
core.warning("Couldn't read messageIDs");
@ -29,23 +36,56 @@ export async function getMessageIDs(): Promise<string[]> {
core.warning("Continuing anyway");
return [];
})
case "webhook":
return getStorageWebhook()
.fetchMessage(core.getInput("storageWebhookMessageID"))
.then(v => v.content.split(", "))
.catch(e => {
core.warning("Couldn't read messageIDs");
return [];
});
default:
throw new Error(`Storage method is unknown: ${method}`);
}
}
export async function pushMessageIDs() {
export async function pushMessageIDs(messageIDs: string[]) {
const method = getStorageMethod();
switch (method) {
case "git":
const gitFileLocation = core.getInput("storageGitFileLocation", { required: true });
await fs.copyFile(
core.getInput("outputFileLocation"),
gitFileLocation
);
await exec("git config --global user.name \"Actions\"")
await exec("git config --global user.email \"noreply@users.noreply.github.com\"")
await exec("git add ./messageIDs.txt")
await exec(`git add ${gitFileLocation}`);
await _exec("git", ["commit", "-m", "Update stored messageIDs"])
await exec("git push");
return true;
case "none":
return false;
case "webhook":
const content = messageIDs.join(", ");
try {
const id = core.getInput("storageWebhookMessageID");
if (id === "" || isNaN(Number(id)))
throw new Error("Invalid argument provided for storageWebhookMessageID");
await getStorageWebhook().editMessage(
core.getInput("storageWebhookMessageID"),
content
)
core.info("Message for storage edited!")
}
catch (e) {
core.warning("Couldn't edit storage message");
core.warning(e as Error);
core.warning("Sending a new storage message");
const message = await getStorageWebhook().send(messageIDs.join(", "));
core.info(`Message for storage sent! ID: ${message.id}`);
}
return true;
default:
throw new Error(`Storage method is unknown: ${method}`);
}