Merge branch 'dev' into 'main'

Dev

See merge request illegitimate/illegitimate-bot!229
This commit is contained in:
2024-02-18 13:41:10 +00:00
3 changed files with 65 additions and 90 deletions

View File

@@ -1,46 +1,88 @@
import { SlashCommandBuilder } from "discord.js"
import { ICommand } from "interfaces"
import search from "./anime/search"
import { devMessage, embedColor } from "config/options"
import { anilist } from "anilist"
import { capitalizeFirstLetter } from "utils/functions/funcs"
export = {
name: "anime",
description: "Anime subcommands",
public: true,
dev: true,
dev: false,
subcommands: true,
data: new SlashCommandBuilder()
.setName("anime")
.setDescription("Anime subcommands")
.addSubcommand(subcommand =>
subcommand
.setName("search")
.setDescription("Search for an anime")
.setDescription("Search for anime using anilist API")
.addStringOption(option =>
option
.setName("query")
.setDescription("The anime to search for")
.setRequired(true)
)
)
.setDMPermission(false),
async execute(interaction) {
const subcommand = interaction.options.getSubcommand()
await interaction.deferReply()
const query = interaction.options.getString("query")!
if (subcommand === "search") {
search(interaction)
return
const data = anilist.query.media()
.arguments({ search: query, type: "ANIME" })
.withTitles("english", "romaji")
.withDescription()
.withCoverImage("medium")
.withDuration()
.withGenres()
.withAverageScore()
.withMeanScore()
.withEpisodes()
.withId()
.withStartDate("year", "month", "day")
.withEndDate("year", "month", "day")
.withSeason()
.withSiteUrl()
const anime = await data.fetch()
if (!anime) {
await interaction.editReply({
embeds: [{
description: "No anime found",
color: embedColor
}]
})
}
await interaction.reply({
const romaji = anime.title?.romaji || "Romaji not available"
const english = anime.title?.english || "English not available"
const animeDescription = anime.description?.replaceAll("<br>", "\n").slice(0, 256) + "..." || "No description available"
const animeEpisodesRaw = anime.episodes + " episodes" + " | " + anime.duration + " minute episodes"
const animeEpisodes = anime.episodes ? animeEpisodesRaw : "No episodes available"
const animeStartDate = [anime.startDate?.day || "??", anime.startDate?.month || "??", anime.startDate?.year || "????"].join(".")
const animeEndDate = [anime.endDate?.day || "??", anime.endDate?.month || "??", anime.endDate?.year || "????"].join(".")
const animeSeasonRaw = capitalizeFirstLetter(anime.season ?? "null") + " " + anime.startDate?.year
const animeSeason = anime.season ? animeSeasonRaw : "No season available"
await interaction.editReply({
embeds: [{
description: "This command is currently under development",
title: romaji + " | " + english,
url: anime.siteUrl || "",
description: `
**Description:** ${animeDescription}
**Genres:** ${anime.genres.join(", ")}
**Avg. Score:** ${anime.averageScore || "No score available"}
**Mean Score:** ${anime.meanScore || "No score available"}
**Episodes:** ${animeEpisodes || "No episodes available"}
**Season:** ${animeSeason}
**Start Date:** ${animeStartDate}
**End Date:** ${animeEndDate}
`,
color: embedColor,
thumbnail: {
url: anime.coverImage?.medium || ""
},
footer: {
text: interaction.guild!.name + " | " + devMessage,
icon_url: interaction.guild!.iconURL() || undefined
text: "ID: " + anime.id + " | " + devMessage
}
}]
})

View File

@@ -1,68 +0,0 @@
import { ChatInputCommandInteraction } from "discord.js"
import { anilist } from "anilist"
import { embedColor } from "config/options"
import { capitalizeFirstLetter } from "utils/functions/funcs"
export default async function search(interaction: ChatInputCommandInteraction) {
await interaction.deferReply()
const query = interaction.options.getString("query")!
const data = anilist.query.media()
.arguments({ search: query, type: "ANIME" })
.withTitles("english", "romaji")
.withDescription()
.withCoverImage("medium")
.withDuration()
.withGenres()
.withAverageScore()
.withMeanScore()
.withEpisodes()
.withId()
.withStartDate("year", "month", "day")
.withEndDate("year", "month", "day")
.withSeason()
const anime = await data.fetch()
if (!anime) {
await interaction.editReply({
embeds: [{
description: "No anime found",
color: embedColor
}]
})
}
const romaji = anime.title?.romaji || "Romaji not available"
const english = anime.title?.english || "English not available"
const animeDescription = anime.description?.replaceAll("<br>", "\n").slice(0, 256) + "..." || "No description available"
const animeEpisodesRaw = anime.episodes + " episodes" + " | " + anime.duration + " minute episodes"
const animeEpisodes = anime.episodes ? animeEpisodesRaw : "No episodes available"
const animeStartDate = [anime.startDate?.day || "??", anime.startDate?.month || "??", anime.startDate?.year || "????"].join(".")
const animeEndDate = [anime.endDate?.day || "??", anime.endDate?.month || "??", anime.endDate?.year || "????"].join(".")
const animeSeasonRaw = capitalizeFirstLetter(anime.season ?? "null") + " " + anime.startDate?.year
const animeSeason = anime.season ? animeSeasonRaw : "No season available"
await interaction.editReply({
embeds: [{
title: romaji + " | " + english,
description: `
**Description:** ${animeDescription}
**Genres:** ${anime.genres.join(", ")}
**Avg. Score:** ${anime.averageScore || "No score available"}
**Mean Score:** ${anime.meanScore || "No score available"}
**Episodes:** ${animeEpisodes || "No episodes available"}
**Season:** ${animeSeason}
**Start Date:** ${animeStartDate}
**End Date:** ${animeEndDate}
`,
color: embedColor,
thumbnail: {
url: anime.coverImage?.medium || ""
},
footer: {
text: "ID: " + anime.id
}
}]
})
}

View File

@@ -17,6 +17,7 @@ export = {
.setDMPermission(false),
async execute(interaction, client) {
const { default: prettyMs } = await import("pretty-ms")
const castedDeps = dependencies as { [key: string]: string }
const castedDevDeps = devDependencies as { [key: string]: string }
let osInfo: string
@@ -55,7 +56,7 @@ export = {
> **Discord.js Version:** \`${(castedDeps["discord.js"]).replace("^", "")}\`
> **Dependencies (${Object.keys(castedDeps).length}):** \`${deps}\`
> **Dev Dependencies (${Object.keys(castedDevDeps).length}):** \`${devDeps}\`
> **Uptime:** \`${Math.floor(client.uptime! / 1000 / 60)} minutes\`
> **Uptime:** \`${prettyMs(client.uptime!, { verbose: true })}\`
__**Cache**__
> **Guilds:** \`${client.guilds.cache.size}\`