Skip to content

Commit

Permalink
feat: human readable airing animes
Browse files Browse the repository at this point in the history
  • Loading branch information
skuzow committed Sep 16, 2023
1 parent fdd55ab commit 698c5d9
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 31 deletions.
28 changes: 27 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"dependencies": {
"axios": "^1.4.0",
"discord.js": "^14.11.0",
"dotenv": "^16.3.1"
"dotenv": "^16.3.1",
"pretty-ms": "^8.0.0"
},
"devDependencies": {
"@types/node": "^20.3.2",
Expand Down
35 changes: 6 additions & 29 deletions src/commands/anime/_anilistLink.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
AnimeEntry,
AnimeNextAiringEpisode
} from '../../types/Anilist.js';
import prettyMilliseconds from 'pretty-ms';

const ANILIST_GRAPHQL_URL = 'https://graphql.anilist.co';

Expand All @@ -37,8 +38,8 @@ async function requestQuery(username: string): Promise<Anilist> {
function generateInfoEmbed(response: Anilist): EmbedBuilder {
return new EmbedBuilder()
.setColor(Colors.LuminousVividPink)
.setTitle('Successfully linked ' + response.user.name + ' Anime List')
.setDescription('Current airing animes')
.setTitle(`Successfully linked ${response.user.name} Anilist`)
.setDescription('Current airing animes on linked account')
.setThumbnail(response.user.avatar.medium)
.setFields(filterAiringAnimes(response.lists[0].entries))
.setTimestamp()
Expand Down Expand Up @@ -66,34 +67,10 @@ function filterAiringAnimes(animes: AnimeEntry[]): AnimeField[] {

function generateAnimeValue(anime: AnimeNextAiringEpisode | null): string {
if (anime === null) return 'No airing episodes';
const { days, hours, remainingMinutes } = convertSecondsToDaysHoursMinutes(
anime.timeUntilAiring
const airingHumanReadable: string = prettyMilliseconds(
anime.timeUntilAiring * 1000
);
return `Episode ${anime.episode} will air in ${days} days, ${hours} hours, and ${remainingMinutes} minutes`;
}

function convertSecondsToDaysHoursMinutes(seconds: number): {
days: number;
hours: number;
remainingMinutes: number;
} {
const minutes: number = seconds / 60;
const minutesInDay: number = 60 * 24;
const minutesInHour = 60;

const days: number = Math.floor(minutes / minutesInDay);
const remainingMinutesAfterDays: number = minutes % minutesInDay;

const hours: number = Math.floor(remainingMinutesAfterDays / minutesInHour);
const remainingMinutes: number = Math.floor(
remainingMinutesAfterDays % minutesInHour
);

return {
days,
hours,
remainingMinutes
};
return `Episode ${anime.episode} will air in ${airingHumanReadable}`;
}

function generateQuery(username: string): string {
Expand Down

0 comments on commit 698c5d9

Please sign in to comment.