From 05dedd027183d0556e51e9a48cae7a73de42d36d Mon Sep 17 00:00:00 2001 From: Chad Doty Date: Tue, 24 Feb 2026 10:55:24 -0500 Subject: [PATCH] ECS Test Fluxer Bot 1.0.1 --- .gitignore | 29 ++++++++++++ README.md | 18 +++++++ example.env | 3 ++ index.js | 48 +++++++++++++++++++ package-lock.json | 117 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 17 +++++++ 6 files changed, 232 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 example.env create mode 100644 index.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2e9a8cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Environment variables (CRITICAL - Keeps your token safe) +.env +.env.test +.env.production +.env.local + +# Dependency directories +node_modules/ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# OS generated files (Windows/Mac clutter) +Thumbs.db +ehthumbs.db +.DS_Store + +# Editor directories and files +.vscode/ +.idea/ +*.suo +*.ntvs* +*.njsproj +*.sln +*.swp \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2a79879 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# Eh Bro Hub Welcome Bot + +A lightweight Node.js bot built with `@fluxerjs/core` to manage new members joining the Eh Bro Hub server. + +## Features +* **Auto-Role Assignment:** Instantly grants a specified role to new users as soon as they join the server. +* **Custom Welcome Messages:** Pings and greets new members with a tailored message in a designated welcome channel. + +## Prerequisites +* [Node.js](https://nodejs.org/) installed on your machine or server. +* A registered bot application and token from the Fluxer Developer Portal. + +## Installation + +1. **Clone the repository** to your local machine or server. +2. **Navigate to the project directory:** + ```bash + cd your-project-folder \ No newline at end of file diff --git a/example.env b/example.env new file mode 100644 index 0000000..35b5049 --- /dev/null +++ b/example.env @@ -0,0 +1,3 @@ +BOT_TOKEN=example_bot_token_here +WELCOME_CHANNEL_ID=example_welcome_channel_id_here +AUTO_ROLE_ID=example_auto_role_id_here \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..5fede51 --- /dev/null +++ b/index.js @@ -0,0 +1,48 @@ +require("dotenv").config(); +const { Client, Events } = require("@fluxerjs/core"); + +const client = new Client(); + +// Your specific IDs for your server, make sure to set these in your .env file +const AUTO_ROLE_ID = process.env.AUTO_ROLE_ID; +const WELCOME_CHANNEL_ID = process.env.WELCOME_CHANNEL_ID; +const BOT_TOKEN = process.env.BOT_TOKEN; + +// Safety check before attempting to log in +if (!BOT_TOKEN) { + console.error( + "CRITICAL ERROR: BOT_TOKEN is missing or undefined. Check your .env file!", + ); + process.exit(1); +} + +client.on(Events.Ready, () => { + /* This will log the bot's username and discriminator to the console when it successfully logs in + * For some reason, client.user.tag doesn't work, so we have to concatenate the username and discriminator manually. + */ + console.log(`Online! Logged in as ${client.user.username}#${client.user.discriminator}`); +}); + +client.on(Events.GuildMemberAdd, async (member) => { + try { + await member.roles.add(AUTO_ROLE_ID); + console.log(`Assigned role to ${member.user.username}`); + + const welcomeChannel = + await member.guild.channels.fetch(WELCOME_CHANNEL_ID); + if (welcomeChannel) { + // This is my example for my server welcome message, feel free to change it up to fit your server's vibe! + await welcomeChannel.send( + `Eh Bro! Welcome to the Hub, <@${member.user.id}>! Grab a seat and say hello. You also have the Role ${member.guild.roles.cache.get(AUTO_ROLE_ID).name} now, so you can check out the channels and get involved!`, + ); + } + } catch (error) { + console.error( + `Failed to handle join event for ${member.user.username}:`, + error, + ); + } +}); + +// Log in +client.login(BOT_TOKEN); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6463c49 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,117 @@ +{ + "name": "ecstest1", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ecstest1", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@fluxerjs/core": "^1.2.2", + "dotenv": "^17.3.1" + } + }, + "node_modules/@fluxerjs/builders": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@fluxerjs/builders/-/builders-1.2.2.tgz", + "integrity": "sha512-647yuM44Fs+Cf/MKo01XRWoVb7RoFdSOBHebFiTLLCTO/tqz+dgZ4wgVsDNu9O/BB/oZ2tjAp9jDTxvXMXkUbA==", + "license": "Apache-2.0", + "dependencies": { + "@fluxerjs/types": "1.2.2", + "@fluxerjs/util": "1.2.2" + } + }, + "node_modules/@fluxerjs/collection": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@fluxerjs/collection/-/collection-1.2.2.tgz", + "integrity": "sha512-ryytiFh38gELqOLHBtL6Tz4f7/7DIu9L2CMTOqNYoer7E1ef8ukU7YiyANASWHgTf34hcGMC0tdi0dcFFFKkKQ==", + "license": "Apache-2.0" + }, + "node_modules/@fluxerjs/core": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@fluxerjs/core/-/core-1.2.2.tgz", + "integrity": "sha512-P+c1jveYqwWGT6vafw+U1WmDPJ0Brp+aNa52Qp2vSsEQ3FLNUg+/25PhyrcPP0x2Mf7zoa1Wv9zGLlkHlKb9Ag==", + "license": "Apache-2.0", + "dependencies": { + "@fluxerjs/builders": "1.2.2", + "@fluxerjs/collection": "1.2.2", + "@fluxerjs/rest": "1.2.2", + "@fluxerjs/types": "1.2.2", + "@fluxerjs/util": "1.2.2", + "@fluxerjs/ws": "1.2.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@fluxerjs/rest": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@fluxerjs/rest/-/rest-1.2.2.tgz", + "integrity": "sha512-Y96A2wQJ8akiAPpiyQm2WWBfNvrQBGIxIuwFCTuXkWg/g+0D6hYrVB7VHxQlnBeDUlj4T+fSJiqSoAYQ3pwrCQ==", + "license": "Apache-2.0", + "dependencies": { + "@fluxerjs/types": "1.2.2" + } + }, + "node_modules/@fluxerjs/types": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@fluxerjs/types/-/types-1.2.2.tgz", + "integrity": "sha512-z3AcTxVF2iY/D0XR8xGIcx+c6LY6eNLWR0uO46xNGmEqpm5guE3joDz/EN8DfAZXuap/ludgqX6EA8dLADIeMg==", + "license": "Apache-2.0" + }, + "node_modules/@fluxerjs/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@fluxerjs/util/-/util-1.2.2.tgz", + "integrity": "sha512-H0c6rKufJJQsz7cloZSK1EqqbRCaxEIF2LdJ4cIRiGPczQTleD2xAIOQ2NvBZxnFvwx+OeetZs79b42bsjcjHQ==", + "license": "Apache-2.0", + "dependencies": { + "@fluxerjs/types": "1.2.2" + } + }, + "node_modules/@fluxerjs/ws": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@fluxerjs/ws/-/ws-1.2.2.tgz", + "integrity": "sha512-twg1wYRYo4DlEHsVHSuUhSAKGK2qTmHM2PV3LNSdE0HdGQIB1EFviSuo0rWDpCb1sVTwIzBVMtthrlxyPfVtKA==", + "license": "Apache-2.0", + "dependencies": { + "@fluxerjs/types": "1.2.2", + "ws": "^8.18.0" + } + }, + "node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1d7153d --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "ecstest1", + "version": "1.0.1", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "DevEhChad", + "license": "MIT", + "type": "commonjs", + "dependencies": { + "@fluxerjs/core": "^1.2.2", + "dotenv": "^17.3.1" + } +}