{"id":16623641,"url":"https://github.com/catplvsplus/pong-mc","last_synced_at":"2026-05-25T23:34:31.302Z","repository":{"id":252257236,"uuid":"652553092","full_name":"catplvsplus/pong-mc","owner":"catplvsplus","description":"Yet another Minecraft server status bot","archived":false,"fork":false,"pushed_at":"2023-06-12T11:18:09.000Z","size":76,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-18T01:07:38.948Z","etag":null,"topics":["minecraft","minecraft-server","ping","status-bot"],"latest_commit_sha":null,"homepage":"https://discord.com/api/oauth2/authorize?client_id=903939319490826260\u0026permissions=274878294080\u0026scope=bot%20applications.commands","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/catplvsplus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-12T09:58:35.000Z","updated_at":"2023-08-03T12:30:26.000Z","dependencies_parsed_at":"2024-08-08T17:28:37.795Z","dependency_job_id":null,"html_url":"https://github.com/catplvsplus/pong-mc","commit_stats":null,"previous_names":["catplvsplus/pong-mc"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catplvsplus%2Fpong-mc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catplvsplus%2Fpong-mc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catplvsplus%2Fpong-mc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catplvsplus%2Fpong-mc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/catplvsplus","download_url":"https://codeload.github.com/catplvsplus/pong-mc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243021440,"owners_count":20223066,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["minecraft","minecraft-server","ping","status-bot"],"created_at":"2024-10-12T03:24:25.997Z","updated_at":"2025-12-12T08:12:22.918Z","avatar_url":"https://github.com/catplvsplus.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introduction\n\nReciple is a discord.js command handler framework.\n\n## Reciple Modules\n\nReciple scans the directory assigned in `reciple.yml` under `modules.modulesFolders` property. `modules.modulesFolders` can be the path of the folder of modules or glob pattern\n\n### Folder Structure\n\n##### Example Structure\n```yml\n# Modules config\n\nmodules:\n  modulesFolders:\n    - './modules' # Scans the modules folder for module files\n```\n\n```\n# Dir structure\n\nmodules/\n├─ Module1.js\n├─ Module2.js\n```\n\n##### Example Structure with Glob patterns\n```yml\n# Modules config\n\nmodules:\n  modulesFolders:\n    - './modules' # Scans the modules folder for module files\n    - './modules/*' # Scans the folders of modules folder for module files\n```\n\n```\n# Dir structure\n\nmodules/\n├─ moreModules/\n│  ├─ Module1.js\n│  ├─ Module2.js\n├─ Module3.js\n├─ Module4.js\n```\n\n### Module Structure\n\nModule files can be ES Modules or CommonJs.\n\n##### Supported module file types\n\n- `.js` *This can be an ESM or CJS*\n- `.mjs`\n- `.cjs`\n\n#### Module file structure\n\n| Property | type | Required | Description |\n|---|---|:---:|---|\n| `versions` | `string\\|string[]` | `true` | The versions of the Reciple client that the module script is compatible with. The versions can be a string or an array of strings. |\n| `commands` | `(AnyCommandBuilder\\|AnyCommandData)[]]` | `false` | The commands that are defined by the module script. |\n| `onStart`  | `(client: RecipleClient, module: RecipleModule) =\u003e Awaitable\u003cboolean\u003e` | `true` | The function that is called when the module script is started. The function must return a boolean value or a promise that resolves to a boolean value. The boolean value indicates whether the module script was started successfully. |\n| `onLoad`   | `(client: RecipleClient, module: RecipleModule) =\u003e Awaitable\u003cvoid\u003e` | `false` | The function that is called when the module script is loaded. |\n| `onUnload` | `(unloadData: RecipleModuleUnloadData) =\u003e Awaitable\u003cvoid\u003e` | `false` | The function that is called when the module script is unloaded. |\n\n#### ESM module example\n\n```js\n// Usage without classes\n\nexport default {\n    versions: '^7',\n    onStart: async client =\u003e {\n        return true;\n    },\n    onLoad: async client =\u003e {},\n    onUnload: async ({ client }) =\u003e {}\n};\n```\n```js\n// Usage with classes\n\nexport class MyModule {\n    versions = '^7';\n    commands = [];\n\n    async onStart(client) {\n        return true;\n    }\n\n    async onLoad(client) {}\n    async onUnload(unloadData) {}\n}\n\nexport default new MyModule();\n```\n\n#### CommonJS module example\n\n```js\n// Usage without classes\n\nmodule.exports = {\n    versions: '^7',\n    onStart: async client =\u003e {\n        return true;\n    },\n    onLoad: async client =\u003e {},\n    onUnload: async ({ client }) =\u003e {}\n};\n```\n```js\n// Usage with classes\n\nclass MyModule {\n    versions = '^7';\n    commands = [];\n\n    async onStart(client) {\n        return true;\n    }\n\n    async onLoad(client) {}\n    async onUnload(unloadData) {}\n}\n\nmodule.exports = new MyModule();\n```\n\n## Reciple Commands\n\ninstead of importing builders from you'll need to import command builders from `reciple` or `@reciple/client`.\n\n```diff\n- const { SlashCommandBuilder, ContextMenuCommandBuilder } = require('discord.js');\n- import { SlashCommandBuilder, ContextMenuCommandBuilder } from 'discord.js';\n+ const { SlashCommandBuilder, ContextMenuCommandBuilder } = require('reciple');\n+ import { SlashCommandBuilder, ContextMenuCommandBuilder } from 'reciple';\n```\n\nYou can add your commands in the commands property of your module script.\n\n```js\nexport default {\n    versions: '^7',\n    commands: [\n        new SlashCommandBuilder()\n            .setName('ping')\n            .setDescription('Just a ping command')\n            .setExecute(async ({ interaction }) =\u003e {\n                await interaction.reply('Pong');\n            })\n    ],\n    onStart: async client =\u003e {\n        return true;\n    }\n};\n```\n\n### Interaction command execute params\n\n| Param | Type | Required | Description |\n|---|---|:---:|---|\n| `interaction` | `ChatInputCommandInteraction\\|AnyContextMenuCommandInteraction` | `true` | The command interaction that triggers the command |\n| `client` | `RecipleCommand` | `true` | The current bot client |\n| `builder` | `AnySlashCommandBuilder\\|ContextMenuCommandBuilder` | `true` | The builder of the executed command |\n| `commandType` | `CommandType` | `true` | The type of executed command |\n\n### Message command execute params\n\n| Param | Type | Required | Description |\n|---|---|:---:|---|\n| `message` | `Message` | `true` | The message that triggers the command |\n| `client` | `RecipleCommand` | `true` | The current bot client |\n| `builder` | `AnySlashCommandBuilder\\|ContextMenuCommandBuilder` | `true` | The builder of the executed command |\n| `commandType` | `CommandType` | `true` | The type of executed command |\n| `options` | `MessageCommandOptionManager` | `true` | The parsed options passed to this command |\n\n### Handling command execute errors\n\nCommand halt function can handle command cooldown and errors. Return `true` if the error or cooldown is handled.\n\n```js\nnew SlashCommandBuilder()\n    .setName('ping')\n    .setDescription('Just a ping command')\n    .setExecute(async ({ interaction }) =\u003e {\n        await interaction.reply('Pong');\n    })\n    .setHalt(async haltData =\u003e {\n        switch (haltData.reason) {\n            case CommandHaltReason.Cooldown:\n                await haltData.executeData.interaction.followUp('You\\'ve been cooled-down');\n                return true;\n            case CommandHaltReason.Error:\n                await haltData.executeData.interaction.followUp('An error occured');\n                return true;\n        }\n\n        // The rest is unhandled\n    })\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatplvsplus%2Fpong-mc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatplvsplus%2Fpong-mc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatplvsplus%2Fpong-mc/lists"}