From d419ca91e6e4236110e975980b67332d7e9803d1 Mon Sep 17 00:00:00 2001 From: Asaki Yuki <108646953+AsakiYuki@users.noreply.github.com> Date: Mon, 20 Oct 2025 23:56:33 +0700 Subject: [PATCH] edit something --- bun.lock | 84 +++++++++++++++++++++++++++++++++ config.json | 3 ++ package.json | 1 + src/app.ts | 4 ++ src/cmd/index.ts | 3 -- src/components/config.ts | 11 +++++ src/events/clientReady.ts | 32 ++++++++++++- src/events/interactionCreate.ts | 5 +- src/handler/executeCommand.ts | 2 +- 9 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 bun.lock create mode 100644 config.json create mode 100644 src/components/config.ts diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..99ff397 --- /dev/null +++ b/bun.lock @@ -0,0 +1,84 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "fireflydiscordbot", + "dependencies": { + "@discordjs/voice": "^0.19.0", + "discord.js": "^14.23.2", + "jsonc-parser": "^3.3.1", + "typescript": "^5.9.3", + }, + "devDependencies": { + "@types/node": "^24.7.2", + "@types/pngjs": "^6.0.5", + "dotenv": "^17.2.3", + }, + }, + }, + "packages": { + "@discordjs/builders": ["@discordjs/builders@1.12.2", "", { "dependencies": { "@discordjs/formatters": "^0.6.1", "@discordjs/util": "^1.1.1", "@sapphire/shapeshift": "^4.0.0", "discord-api-types": "^0.38.26", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" } }, "sha512-AugKmrgRJOHXEyMkABH/hXpAmIBKbYokCEl9VAM4Kh6FvkdobQ+Zhv7AR6K+y5hS7+VQ7gKXPYCe1JQmV07H1g=="], + + "@discordjs/collection": ["@discordjs/collection@1.5.3", "", {}, "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ=="], + + "@discordjs/formatters": ["@discordjs/formatters@0.6.1", "", { "dependencies": { "discord-api-types": "^0.38.1" } }, "sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg=="], + + "@discordjs/rest": ["@discordjs/rest@2.6.0", "", { "dependencies": { "@discordjs/collection": "^2.1.1", "@discordjs/util": "^1.1.1", "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.3", "@vladfrangu/async_event_emitter": "^2.4.6", "discord-api-types": "^0.38.16", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.3" } }, "sha512-RDYrhmpB7mTvmCKcpj+pc5k7POKszS4E2O9TYc+U+Y4iaCP+r910QdO43qmpOja8LRr1RJ0b3U+CqVsnPqzf4w=="], + + "@discordjs/util": ["@discordjs/util@1.1.1", "", {}, "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g=="], + + "@discordjs/voice": ["@discordjs/voice@0.19.0", "", { "dependencies": { "@types/ws": "^8.18.1", "discord-api-types": "^0.38.16", "prism-media": "^1.3.5", "tslib": "^2.8.1", "ws": "^8.18.3" } }, "sha512-UyX6rGEXzVyPzb1yvjHtPfTlnLvB5jX/stAMdiytHhfoydX+98hfympdOwsnTktzr+IRvphxTbdErgYDJkEsvw=="], + + "@discordjs/ws": ["@discordjs/ws@1.2.3", "", { "dependencies": { "@discordjs/collection": "^2.1.0", "@discordjs/rest": "^2.5.1", "@discordjs/util": "^1.1.0", "@sapphire/async-queue": "^1.5.2", "@types/ws": "^8.5.10", "@vladfrangu/async_event_emitter": "^2.2.4", "discord-api-types": "^0.38.1", "tslib": "^2.6.2", "ws": "^8.17.0" } }, "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw=="], + + "@sapphire/async-queue": ["@sapphire/async-queue@1.5.5", "", {}, "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg=="], + + "@sapphire/shapeshift": ["@sapphire/shapeshift@4.0.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" } }, "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg=="], + + "@sapphire/snowflake": ["@sapphire/snowflake@3.5.3", "", {}, "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ=="], + + "@types/node": ["@types/node@24.7.2", "", { "dependencies": { "undici-types": "~7.14.0" } }, "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA=="], + + "@types/pngjs": ["@types/pngjs@6.0.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ=="], + + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "@vladfrangu/async_event_emitter": ["@vladfrangu/async_event_emitter@2.4.7", "", {}, "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g=="], + + "discord-api-types": ["discord-api-types@0.38.30", "", {}, "sha512-KhAqlBrg+rVK+Ob7INMF5o63yW4/GUzRatG/AjyVsIO8lgcLyR8qCl2HokIVzWwmzkJYG0CEPXsKMOqau3E8NA=="], + + "discord.js": ["discord.js@14.23.2", "", { "dependencies": { "@discordjs/builders": "^1.12.1", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.1", "@discordjs/rest": "^2.6.0", "@discordjs/util": "^1.1.1", "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.3", "discord-api-types": "^0.38.29", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.3" } }, "sha512-tU2NFr823X3TXEc8KyR/4m296KLxPai4nirN3q9kHCpY4TKj96n9lHZnyLzRNMui8EbL07jg9hgH2PWWfKMGIg=="], + + "dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="], + + "magic-bytes.js": ["magic-bytes.js@1.12.1", "", {}, "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA=="], + + "prism-media": ["prism-media@1.3.5", "", {}, "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA=="], + + "ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici": ["undici@6.21.3", "", {}, "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="], + + "undici-types": ["undici-types@7.14.0", "", {}, "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA=="], + + "ws": ["ws@8.18.3", "", {}, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + + "@discordjs/rest/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="], + + "@discordjs/rest/@sapphire/snowflake": ["@sapphire/snowflake@3.5.5", "", {}, "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ=="], + + "@discordjs/ws/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="], + } +} diff --git a/config.json b/config.json new file mode 100644 index 0000000..c37abed --- /dev/null +++ b/config.json @@ -0,0 +1,3 @@ +{ + "startup_messages": ["I'm online!"] +} diff --git a/package.json b/package.json index b227941..eaef33c 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "dependencies": { "@discordjs/voice": "^0.19.0", "discord.js": "^14.23.2", + "jsonc-parser": "^3.3.1", "typescript": "^5.9.3" }, "devDependencies": { diff --git a/src/app.ts b/src/app.ts index 11bc808..838ab8e 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,3 +1,7 @@ +import dotenv from "dotenv" + +dotenv.config({ quiet: true }) + import "./cmd/index" import path from "path" import { requireDirectory } from "./handler/requireDirectory" diff --git a/src/cmd/index.ts b/src/cmd/index.ts index b4f421e..031bf9f 100644 --- a/src/cmd/index.ts +++ b/src/cmd/index.ts @@ -1,9 +1,6 @@ import { REST, Routes } from "discord.js" -import dotenv from "dotenv" - import { Cmd } from "../types/cmd" import { requireDirectory } from "../handler/requireDirectory" -dotenv.config() const TOKEN = process.env.TOKEN const CLIENTID = process.env.CLIENTID diff --git a/src/components/config.ts b/src/components/config.ts new file mode 100644 index 0000000..3d41525 --- /dev/null +++ b/src/components/config.ts @@ -0,0 +1,11 @@ +import JSONC from "jsonc-parser" +import fs from "fs" + +interface CONFIG { + startup_messages: string[] +} + +const data = fs.readFileSync("config.json", "utf-8") +const config: CONFIG = JSONC.parse(data) + +export default config diff --git a/src/events/clientReady.ts b/src/events/clientReady.ts index 9b5022a..86a08c1 100644 --- a/src/events/clientReady.ts +++ b/src/events/clientReady.ts @@ -1,5 +1,33 @@ +import { ActivityType } from "discord.js" import { client } from "../components/client" +import config from "../components/config" -client.on("clientReady", client => { - console.log(`Logged in as ${client.user?.tag}`) +client.on("clientReady", async client => { + try { + console.log(`Logged in as ${client.user?.tag}`) + + client.user.setActivity({ + name: "Docker", + state: "Develop by Asaki Yuki", + url: "https://asakiyuki.com/", + type: ActivityType.Playing, + }) + + try { + const channelId = process.env.CLIENTID + if (!channelId) throw new Error("Missing CLIENTID in .env file") + + const channel = await client.channels.fetch(channelId) + if (!channel) throw new Error("Channel not found") + + const message = config.startup_messages?.[Math.floor(Math.random() * config.startup_messages.length)] + if (!message) throw new Error("Missing startup message") + + if (channel.isSendable()) await channel.send(message) + } catch (error) { + console.error(error) + } + } catch (error) { + console.error(error) + } }) diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 97dee02..435ffe8 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -2,8 +2,5 @@ import { client } from "../components/client" import { execCmd } from "../handler/executeCommand" client.on("interactionCreate", async interaction => { - if (interaction.isCommand() && interaction.isChatInputCommand()) { - console.log(interaction) - execCmd(interaction) - } + if (interaction.isCommand() && interaction.isChatInputCommand()) execCmd(interaction) }) diff --git a/src/handler/executeCommand.ts b/src/handler/executeCommand.ts index a447670..b31197b 100644 --- a/src/handler/executeCommand.ts +++ b/src/handler/executeCommand.ts @@ -6,7 +6,7 @@ export async function execCmd(interaction: ChatInputCommandInteraction 0) { console.info(