Compare commits
1 Commits
main
...
8d340db915
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d340db915 |
@@ -1,3 +1,4 @@
|
|||||||
node_modules
|
node_modules
|
||||||
.git
|
.git
|
||||||
config.json
|
config.json
|
||||||
|
avatars
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -141,4 +141,5 @@ dist
|
|||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
|
||||||
config.json
|
config.json
|
||||||
state.json
|
state.json
|
||||||
|
avatars
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"token": "bot token go here",
|
"token": "bot token go here",
|
||||||
"status": "looking for x.com links",
|
"status": "looking for x.com links",
|
||||||
|
"avatarInterval": 15,
|
||||||
"parentsAndOrGuardians": [
|
"parentsAndOrGuardians": [
|
||||||
"230659159450845195",
|
"230659159450845195",
|
||||||
"297983197990354944"
|
"297983197990354944"
|
||||||
|
|||||||
@@ -3,4 +3,5 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
build: .
|
build: .
|
||||||
volumes:
|
volumes:
|
||||||
- ./config.json:/usr/src/bot/config.json
|
- ./config.json:/usr/src/bot/config.json
|
||||||
|
- ./avatars:/usr/src/bot/avatars
|
||||||
2
index.js
2
index.js
@@ -68,6 +68,8 @@ client.on(Events.InteractionCreate, async interaction => {
|
|||||||
client.once(Events.ClientReady, readyClient => {
|
client.once(Events.ClientReady, readyClient => {
|
||||||
console.log(`Discord: Connected as ${readyClient.user.tag}`);
|
console.log(`Discord: Connected as ${readyClient.user.tag}`);
|
||||||
client.user.setActivity(config.status, { type: ActivityType.Custom });
|
client.user.setActivity(config.status, { type: ActivityType.Custom });
|
||||||
|
const avatarRotation = require('./lib/avatarRotation');
|
||||||
|
avatarRotation.init(client);
|
||||||
});
|
});
|
||||||
client.login(config.token);
|
client.login(config.token);
|
||||||
|
|
||||||
|
|||||||
77
lib/avatarRotation.js
Normal file
77
lib/avatarRotation.js
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const config = require('../config.json');
|
||||||
|
|
||||||
|
const AVATAR_DIR = path.join(__dirname, '../avatars');
|
||||||
|
let avatarFiles = [];
|
||||||
|
let currentAvatarIndex = 0;
|
||||||
|
let timer = null;
|
||||||
|
|
||||||
|
function loadAvatars() {
|
||||||
|
try {
|
||||||
|
if (!fs.existsSync(AVATAR_DIR)) {
|
||||||
|
fs.mkdirSync(AVATAR_DIR);
|
||||||
|
console.log('Avatars: Created avatars directory');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const files = fs.readdirSync(AVATAR_DIR);
|
||||||
|
avatarFiles = files.filter(file => /\.(jpg|jpeg|png|gif|webp)$/i.test(file));
|
||||||
|
|
||||||
|
// shuffle
|
||||||
|
for (let i = avatarFiles.length - 1; i > 0; i--) {
|
||||||
|
const j = Math.floor(Math.random() * (i + 1));
|
||||||
|
[avatarFiles[i], avatarFiles[j]] = [avatarFiles[j], avatarFiles[i]];
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Avatars: Loaded ${avatarFiles.length} avatars`);
|
||||||
|
currentAvatarIndex = 0; // Reset index on reload
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Avatars: Error loading avatars:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function rotateAvatar(client) {
|
||||||
|
if (avatarFiles.length === 0) return;
|
||||||
|
|
||||||
|
const avatarFile = avatarFiles[currentAvatarIndex];
|
||||||
|
const avatarPath = path.join(AVATAR_DIR, avatarFile);
|
||||||
|
|
||||||
|
try {
|
||||||
|
client.user.setAvatar(avatarPath);
|
||||||
|
console.log(`Avatars: Changed avatar to ${avatarFile}`);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Avatars: Failed to set avatar to ${avatarFile}:`, err);
|
||||||
|
}
|
||||||
|
|
||||||
|
currentAvatarIndex = (currentAvatarIndex + 1) % avatarFiles.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
function init(client) {
|
||||||
|
loadAvatars();
|
||||||
|
|
||||||
|
// Watch for changes in the avatars directory
|
||||||
|
let fsWait = null;
|
||||||
|
fs.watch(AVATAR_DIR, (eventType, filename) => {
|
||||||
|
if (filename) {
|
||||||
|
if (fsWait) clearTimeout(fsWait);
|
||||||
|
fsWait = setTimeout(() => {
|
||||||
|
console.log(`Avatars: Detected change in avatars directory`);
|
||||||
|
loadAvatars();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const intervalMinutes = config.avatarInterval || 15;
|
||||||
|
const intervalMs = intervalMinutes * 60 * 1000;
|
||||||
|
|
||||||
|
console.log(`Avatars: Starting avatar rotation every ${intervalMinutes} minutes`);
|
||||||
|
|
||||||
|
// Initial rotation
|
||||||
|
rotateAvatar(client);
|
||||||
|
|
||||||
|
// make it wait every interval before rotating
|
||||||
|
timer = setInterval(() => rotateAvatar(client), intervalMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { init };
|
||||||
Reference in New Issue
Block a user