Skip to content

Commit 5ab0e30

Browse files
authored
Merge pull request #2 from liteless/dev
v1.0.1 - minor changes to how fics are compared
2 parents 0484230 + df5701c commit 5ab0e30

10 files changed

Lines changed: 87 additions & 98 deletions

File tree

.env.vault

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#/--------------------------------------------------/
55

66
# development
7-
DOTENV_VAULT_DEVELOPMENT="7zsgl0/F07jfHjNk34P39MzfyKi/1nYJJWR7ulq2actCgUt0t0rNGH7LZ4DUVc0iAhv/N0q4aX836WOr0KEgaDW7IInGke/jIDUOypqyQAuwZss3CbN7myQHbPVnrKmfAu2xJbJE/7jLZ2fMaZ1G1YOUMMkVTK8g21OZUCKfxF5UJlu6pzH1Hb67LIpkEk4ZzJxf4BqGDLXCaShzy3Hfk03U9aFY+gf3bY/k6j7jZ8PYdklxcdPRG4AFsa8jg0YVYOBQ4PCtczlgoxIZsZfqWqJVogJ39M2U3XMLfvhsLcQyMBQtBVipfGXTPzfTYjQIiLgtUtL14uDWyROvm/+/53I4uDMaUvVl6cfMhHlkY6wi2hhwe48jeCEYMXrxizEndpB+4aUHo48fP3Z3xJFE8lY8a1ZboMDDKFhJ61+SwmdnqWs8ir9eLb9AMsdxDEBUol+Tl0bxXiKy66c6wRZcTxZgFn6U71a1aABbuHSMzfH12O5sonK7AW+eOgJpILwvaQgkjBNQIY8z/joXASJDt4KLJL7Qw9G5cr4GVUvELcYutY3nA3aim9Ys5rWj3zyHxbEIS5Wh5tGO96lTDeu2GSmNZoT9VIsLAHltaGBerb15wpjveQWPmjlffkH0K96F2dSUvHWJo17gMDXfKwS4mwRCudw3HlVmJqjw3lKYwaORaQNJpdyl3b6PUdjnnKYkMFBMzc+VCE4Wa8VX3fw/cFUH5T1I2+XuvbGWZRpHQVZdOlI4SAIngZFMsXuKOpZ8hfAj/gjbYPoqHda26EVrreJ2a7HSYAjSDUDO0vSLUyzPu0gZvml38Co45Wwc8HvaMOGsV4Reew5WZTvZY/lo4BsheShSP9pGr2pf84sB+Ib8qubkw9hCXi1pb/FOkJ873YqeEkDJDI8Y0wbhPkGvB1Z5LBV50wxdJzfUM98rvbdoG6sWGd6uQesGtIOnaVDVdPcPgBEqsahLAcxlfjqsLBnrOZCL62H/D6gUHomz3/scHT/A/F7UwkSKIygNDKrFawwz5JF8Ga6V74NEXwDBLVOptbBmBsiGW+yjb/BxZahy"
8-
DOTENV_VAULT_DEVELOPMENT_VERSION=2
7+
DOTENV_VAULT_DEVELOPMENT="XSrp7ITz2JptDK5jTcOuIBBTO4NjMyakpibgFVEIQLpa6mVYfkEkTiyESVs8ofuG7Z9yF5LRawOeHV77z4FgdqgJceFJ9VpNQHajJqoVr3RcJ38kruWXoQfxXHGJIZhGKO3ocPvFoBbEJsOj4e6SyCGi8RQc115p3jiLvPaGXnMBQrQBdTbHwf0K5CTNEkMmfa+Goe/uqB4ssN7VKpsgnfuF77fIzX0b6SEip3Wp4aRnwNl244v+tiRfGrGIxRCcjdxTiKa4Ic2hE51GSt1V7V6oli4fdWQ766kY4ekIUMyC5D4PzGDVtvLnoVYCHcEM0DKMMgyL2Iypm7ViOpN7YCwf/eRWot0XmO8zy+Ui6F0sEDeTBAa3+OO5b+9uzGxuvcJsb1v5QSHpR3fN1U7Eye6jFSV+5zrJQ1hb6bm2N2risQfoedwlKBhwhnTFb+6tR/xY6gQejZ5UfVjEr6zWRhWN9ZO9GOhgJU5XQV/xslIjkAhTGhUSRdEvXz3USOCZHvEGv/7wVP57vHUtAC5P5qepBvt44M+jXyXBq+CAcpqzNnjTg5t96Ef1slaXYeESyrmDbYnjfdTjGiB2ndW3mqR7NlltoQOUvYOddOHM/TfkhxEgaivwVBU7nYr7M/RlCLY7xcrlMpSq6Q2Rzq9eo2qOUZUxBI+YqpUO0Rx3ynJVhPlnwbYDJpPK61K/0FsZniKcXy1VWmfL4kt5P8L0M7N2SqMtxdRxceVvnlEswfL6zdBaBjnh4be/cn4p8bgfmY5QcI3mfWsFPXkZeOtONYjwl1Zh8ZX82NyX6ksmhXj/63d8Rvyl4ADG92SJOHS8f/wWR4Wcy/7xlHHHv9lvYxepzHo3HrAorfIuNiuWZBmXrT3C9AdD+aiWxEVifUZmS1q97LwTSH2F1gjGXOKqH8K8iYtlgs7O3yxj849vva8tMNrrIauM+VzhwGyg/7KTC7th/cV9T8yGFI5mmHpBhXY81tZ9UJfWOxQAhPfue8fZkQy7OWZ4Y1HmtSYB0bVC+2Tbxo2YtQS+MRV+fF3dQDJY+lw2YNYZE+uCaUJ+2OmM0bmv"
8+
DOTENV_VAULT_DEVELOPMENT_VERSION=3
99

1010
# ci
1111
DOTENV_VAULT_CI="CVcgOI7SE17ikq+lZ9ZpYRIzmG1q/BicO5JrK0Ug8A2UCIx3e+UJT1N8AYC1o7TP0Ju04iGKsS/enQB4gFpqqXtk7i2cXyIUAX7ad2wRvDF3jytQfzKO1GQ/vItviBlW11cIpINuuyM8fw=="
@@ -16,8 +16,8 @@ DOTENV_VAULT_STAGING="/Ir76mvn7x1JAypiwjNfGdUK5Lfq4x6dUlwJF6pRVNbqhi5nlqobceiWYg
1616
DOTENV_VAULT_STAGING_VERSION=2
1717

1818
# production
19-
DOTENV_VAULT_PRODUCTION="2A2FX0HOoj5DwI51hRk+PMvaoTjMD5neA0eULh8zRj3zd3ZbV4ydtonR9crDqsNgI4FVansJzPLHAlThoFaimexowDezBPml82vpDK6/hHc/wRUXiugKxU94j+FvhCK7w6hXOUvR0ThYMg=="
20-
DOTENV_VAULT_PRODUCTION_VERSION=2
19+
DOTENV_VAULT_PRODUCTION="U5L6Ym+LsJcp6Xr7V7z6kTIBKAK0iZJOhRoJkBLuZaH+SVSm44XhQArntfru/LqlXQ5vAVOZO1HX/D6DYrEMFy0jeoTmfb+xXlrJ9H/MPFeZi0y7a0nTPAeo83egTRWR52ivFiB1EaQvbrmiOavcAFzikRkTzrKa39pM09QnrGAPXUHQJ4/qhmGJC4M/Yb6a+LW0ASOa4qjk1quTHhUjdayoLV0Tzf+4aUD7qo5SCyhvzwqNinXNmtzHFtcyODtqaZ/DzfB2DM8kcgr7A5018cO0uZCZ0XfygbG1QyUZy/tScKgSlN1YWdqSFDpTrll4xcKLWWeWnu3w2IeqvulP7D27nmppG+G7eiufFL8z+8Fw8/Ks/UXwBeVI+pf6PYilp3GJjy/lvpnLYyT8VRIRIlRXq3pS5jrbG7Li46nx+yw1LK5iIY4xSSfVy9CpQmW7jurg09ApTdA0lfk5WQKfrd2k4b24tkqztYJNu9LDxNupXEuSgC4QBnxei9Pp0ClIiIoUQRdtulEke/LlIbyQ0uCmbL7N0cwqI5F9qwhjxZm0TFQSVthDdbTgMZfmfiTbREyy9Sxq9OJJGVF2bncVZ0xrAYCAmgkq7ELugUc6Uzl6P7mjzAiRaP47tbhnWKIhnfidnHigwVj2WNqeeuuZOI5a2FyXZX4rhKVunqIqrIv0S/aMfT/TpCIkBbJM8aQH/hf732D5Qx5YclRo5QmOehoXniJF64cn0PedIAaPtvapedXUARg2mynSMeWE2RE1AlBH9BGxWiCeBT2EgMDCfi5GMbtJav2bt0yjdV8Kge3k1ZpTVjJYvCYFZ0U0yLTW4L9LfI17wa29c0FfJPjMxn3GhKI6XMQ9VrJ7heBzHSRO6ujho+TOJMUCOYwuZhs/215WbdPHCiJp3Y2/zqe/EcmIo42vz1cbgz5cLGk8BJgfEXypucQcHIurKQUJIVZZuK2BoeOO+z1HfG8ts4MmGHnALtBo2Rxa1mNpEUaTyqOpBoKU9l97s8gULvXnzlRjpEnnG3NLW3lxkU8BjGRbSyvTQyKypq8yVn3GZR4NTgyg"
20+
DOTENV_VAULT_PRODUCTION_VERSION=3
2121

2222
#/----------------settings/metadata-----------------/
2323
DOTENV_VAULT="vlt_dfb9dd1fde825ce5fc9bd781258f1f8648449be3a5b1996abcf9faa572b8dc44"

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ RUN corepack enable
55
COPY . /app
66
WORKDIR /app
77

8-
FROM base as deps
8+
FROM base AS deps
99
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm fetch --frozen-lockfile
1010
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
1111

@@ -17,5 +17,5 @@ RUN pnpm run build
1717
FROM base
1818
COPY --from=deps /app/node_modules /app/node_modules
1919
COPY --from=build /app/dist /app/dist
20-
ENV NODE_ENV production
20+
ENV NODE_ENV="production"
2121
CMD [ "pnpm", "start" ]

prisma/schema.prisma

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ datasource db {
1313
url = env("DATABASE_URL")
1414
}
1515

16-
model Tags {
17-
id String @id @default(auto()) @map("_id") @db.ObjectId
18-
url String
19-
lastRefresh DateTime @default(now())
20-
}
21-
2216
model Ao3Feeds {
2317
id String @id @default(auto()) @map("_id") @db.ObjectId
2418
feedName String?
@@ -34,7 +28,7 @@ model Ao3WorkSnapshot {
3428
index Int
3529
workId String
3630
chapters Int
37-
lastUpdated DateTime
31+
lastUpdated String
3832
Ao3Feeds Ao3Feeds? @relation(fields: [ao3FeedsId], references: [id])
3933
ao3FeedsId String? @db.ObjectId
4034
}

src/commands/purge.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import {
2+
CommandInteraction,
3+
MessageFlags,
4+
PermissionFlagsBits,
5+
SlashCommandBuilder,
6+
TextChannel,
7+
} from 'discord.js';
8+
import emojis from '../constants/emojis';
9+
10+
export const data = new SlashCommandBuilder()
11+
.setName('purge')
12+
.setDescription('Purges all messages from the current channel.');
13+
14+
export async function execute(interaction: CommandInteraction) {
15+
const channel = interaction.channel;
16+
if (!channel || !interaction.guild) {
17+
return interaction.reply({
18+
content: `${emojis.BOT.LEAF} This command can only be used in a text channel.`,
19+
flags: MessageFlags.Ephemeral,
20+
});
21+
}
22+
23+
const me = interaction.guild.members.me;
24+
25+
if (!me) {
26+
console.error('Bot is not in the guild.');
27+
return;
28+
}
29+
30+
if (
31+
!(interaction.channel as TextChannel)
32+
.permissionsFor(me)
33+
.has(PermissionFlagsBits.ManageMessages)
34+
) {
35+
return interaction.reply({
36+
content: `${emojis.BOT.LEAF} Missing \`Manage Messages\` permission.`,
37+
flags: MessageFlags.Ephemeral,
38+
});
39+
}
40+
41+
let messages;
42+
43+
do {
44+
messages = await (interaction.channel as TextChannel).bulkDelete(
45+
100,
46+
true
47+
);
48+
} while (messages.size > 0);
49+
50+
return interaction.reply({
51+
content: `${emojis.BOT.LEAF} \`Purged all messages from channel.\``,
52+
flags: MessageFlags.Ephemeral,
53+
});
54+
}

src/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Client } from 'discord.js';
22
import { config } from './config';
33
import { commands } from './commands';
4-
import { deployCommands } from './deploy-commands';
4+
import { deployCommands, deployGlobalCommands } from './utils/deploy-commands';
55
import JobService from './services/JobService';
66
import jobs from './jobs';
77

@@ -10,7 +10,10 @@ const client = new Client({
1010
});
1111

1212
client.once('ready', async () => {
13-
console.log('Discord bot is ready! 🤖');
13+
console.log('Ailurus has started!');
14+
console.log(`Logged in as ${client.user?.tag}`);
15+
16+
await deployGlobalCommands();
1417

1518
const jobService = new JobService(client, jobs);
1619
await jobService.start();

src/jobs/check-feeds.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ async function parseFeed(feed: { url: string }) {
132132
wordCount: parseInt(wordCount.replace(/,/g, '')),
133133
chapters: parseInt(chaptersWritten.replace(/,/g, '')),
134134
totalChapters: parseInt(chapters.replace(/,/g, '')),
135-
lastUpdated: new Date(lastUpdated),
135+
lastUpdated: lastUpdated,
136136
};
137137

138138
return workData;
@@ -202,10 +202,7 @@ export const checkFeeds: Job = {
202202
}
203203

204204
// Work exists in snapshots - check if updated by timestamp
205-
if (
206-
work.lastUpdated.getTime() !==
207-
previousSnapshot.lastUpdated.getTime()
208-
) {
205+
if (work.lastUpdated !== previousSnapshot.lastUpdated) {
209206
console.log(`work date changed: ${work.title}`);
210207

211208
updatedWorks.push(work);

src/jobs/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { tagRss } from './tag-rss';
21
import { checkFeeds } from './check-feeds';
32

4-
export default [tagRss, checkFeeds];
3+
export default [checkFeeds];

src/jobs/tag-rss.ts

Lines changed: 0 additions & 72 deletions
This file was deleted.

src/types/work.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ export type Work = {
2828
wordCount: Number;
2929
chapters: Number;
3030
totalChapters: Number;
31-
lastUpdated: Date;
31+
lastUpdated: String;
3232
};
Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { REST, Routes } from 'discord.js';
2-
import { config } from './config';
3-
import { commands } from './commands';
2+
import { config } from '../config';
3+
import { commands } from '../commands';
44

55
const commandsData = Object.values(commands).map(command => command.data);
66

7-
const rest = new REST({ version: '10' }).setToken(config.bot.token);
7+
const rest = new REST().setToken(config.bot.token);
88

99
type DeployCommandsProps = {
1010
guildId: string;
@@ -26,3 +26,17 @@ export async function deployCommands({ guildId }: DeployCommandsProps) {
2626
console.error(error);
2727
}
2828
}
29+
30+
export async function deployGlobalCommands() {
31+
try {
32+
console.log('Started refreshing application (/) commands.');
33+
34+
await rest.put(Routes.applicationCommands(config.bot.clientId), {
35+
body: commandsData,
36+
});
37+
38+
console.log('Successfully reloaded application (/) commands.');
39+
} catch (error) {
40+
console.error(error);
41+
}
42+
}

0 commit comments

Comments
 (0)