Docs: Update README.md and AGENTS-BOT.md
All checks were successful
Auto Build and Push Docker Image / build (push) Successful in 6s
All checks were successful
Auto Build and Push Docker Image / build (push) Successful in 6s
Add Welcome/Goodbye and Logging modules to documentation. Add new events structure, database fields, and command summary. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,9 @@ The bot uses a **Modular Command & Event Loading** pattern with **ESM (ECMAScrip
|
|||||||
5. **Twitch Monitoring:** Periodic API polling with Stream ID tracking.
|
5. **Twitch Monitoring:** Periodic API polling with Stream ID tracking.
|
||||||
6. **Reminder System:** Periodic reminder checking with target_time tracking.
|
6. **Reminder System:** Periodic reminder checking with target_time tracking.
|
||||||
7. **Auto-Response System:** Trigger word detection for automatic replies.
|
7. **Auto-Response System:** Trigger word detection for automatic replies.
|
||||||
8. **Grouped Commands:** Admin/Owner/Trigger/Timer commands grouped under subcommands.
|
8. **Welcome/Goodbye System:** Guild member add/remove events with customizable messages.
|
||||||
|
10. **Logging System:** Configurable event logging (messages, roles, moderation, etc.).
|
||||||
|
11. **Grouped Commands:** Admin/Owner/Trigger/Timer commands grouped under subcommands.
|
||||||
|
|
||||||
## 📁 Project Structure
|
## 📁 Project Structure
|
||||||
|
|
||||||
@@ -29,12 +31,20 @@ pixelpoebel/
|
|||||||
│ │ ├── help.ts
|
│ │ ├── help.ts
|
||||||
│ │ ├── twitch.ts
|
│ │ ├── twitch.ts
|
||||||
│ │ ├── trigger.ts # Auto-responses
|
│ │ ├── trigger.ts # Auto-responses
|
||||||
│ │ ├── timer.ts # Reminders
|
│ │ ├── timer.ts # Reminders
|
||||||
│ │ ├── admin.ts # All admin subcommands
|
│ │ ├── welcome.ts # Welcome/Goodbye messages
|
||||||
│ │ └── owner.ts # All owner subcommands
|
│ │ ├── log.ts # Event logging
|
||||||
|
│ │ ├── admin.ts # All admin subcommands
|
||||||
|
│ │ └── owner.ts # All owner subcommands
|
||||||
│ ├── events/
|
│ ├── events/
|
||||||
│ │ ├── ready.ts
|
│ │ ├── ready.ts
|
||||||
│ │ └── interactionCreate.ts
|
│ │ ├── interactionCreate.ts
|
||||||
|
│ │ ├── guildMemberAdd.ts # Welcome messages
|
||||||
|
│ │ ├── guildMemberRemove.ts # Goodbye messages
|
||||||
|
│ │ ├── guildMemberUpdate.ts # Nickname/role changes
|
||||||
|
│ │ ├── messageDelete.ts # Deleted messages
|
||||||
|
│ │ ├── messageUpdate.ts # Edited messages
|
||||||
|
│ │ └── channelEvent.ts # Channel create/delete
|
||||||
│ └── structures/
|
│ └── structures/
|
||||||
│ ├── ExtendedClient.ts
|
│ ├── ExtendedClient.ts
|
||||||
│ ├── Command.ts
|
│ ├── Command.ts
|
||||||
@@ -47,7 +57,8 @@ pixelpoebel/
|
|||||||
├── tsconfig.json
|
├── tsconfig.json
|
||||||
├── Dockerfile
|
├── Dockerfile
|
||||||
├── docker-compose.yml
|
├── docker-compose.yml
|
||||||
└── .env.example
|
├── .env.example
|
||||||
|
└── .gitattributes
|
||||||
```
|
```
|
||||||
|
|
||||||
## 📝 Implementation Steps
|
## 📝 Implementation Steps
|
||||||
@@ -88,6 +99,10 @@ CREATE TABLE guild_settings (
|
|||||||
prefix TEXT DEFAULT '!',
|
prefix TEXT DEFAULT '!',
|
||||||
mod_log_channel TEXT,
|
mod_log_channel TEXT,
|
||||||
welcome_channel TEXT,
|
welcome_channel TEXT,
|
||||||
|
welcome_message TEXT,
|
||||||
|
goodbye_message TEXT,
|
||||||
|
log_channel TEXT,
|
||||||
|
log_events TEXT DEFAULT 'messages,roles,nicks,channels,warns,mutes,kicks,bans',
|
||||||
warn_threshold INTEGER DEFAULT 3,
|
warn_threshold INTEGER DEFAULT 3,
|
||||||
warn_action TEXT DEFAULT 'ban',
|
warn_action TEXT DEFAULT 'ban',
|
||||||
warn_mute_duration INTEGER DEFAULT 1800
|
warn_mute_duration INTEGER DEFAULT 1800
|
||||||
@@ -227,7 +242,48 @@ export class ReminderManager {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5. Auto-Response (Trigger) System
|
### 5. Welcome/Goodbye System
|
||||||
|
|
||||||
|
**Variables in messages:** `{user}`, `{username}`, `{server}`, `{membercount}`
|
||||||
|
|
||||||
|
**Auto-use Discord system channel if no custom channel set:**
|
||||||
|
```typescript
|
||||||
|
const channelId = settings?.welcome_channel || member.guild.systemChannelId;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Logging System
|
||||||
|
|
||||||
|
**Events that can be logged:**
|
||||||
|
- `messages` - Deleted and edited messages
|
||||||
|
- `roles` - Role changes
|
||||||
|
- `nicks` - Nickname changes
|
||||||
|
- `channels` - Channel create/delete
|
||||||
|
- `warns` - User warnings
|
||||||
|
- `mutes` - User mutes
|
||||||
|
- `kicks` - User kicks
|
||||||
|
- `bans` - User bans
|
||||||
|
|
||||||
|
**Log moderation action:**
|
||||||
|
```typescript
|
||||||
|
async function sendModerationLog(client: any, guildId: string, event: string, embed: EmbedBuilder) {
|
||||||
|
const DB = client.DB;
|
||||||
|
const settings: any = DB.get('SELECT log_events FROM guild_settings WHERE guild_id = ?', guildId);
|
||||||
|
|
||||||
|
if (!settings?.log_events) return;
|
||||||
|
const activeEvents = settings.log_events.split(',').filter(Boolean);
|
||||||
|
if (!activeEvents.includes(event)) return;
|
||||||
|
|
||||||
|
const logSettings: any = DB.get('SELECT log_channel FROM guild_settings WHERE guild_id = ?', guildId);
|
||||||
|
if (!logSettings?.log_channel) return;
|
||||||
|
|
||||||
|
const channel = client.guilds.cache.get(guildId)?.channels.cache.get(logSettings.log_channel);
|
||||||
|
if (!channel || !channel.isTextBased()) return;
|
||||||
|
|
||||||
|
await (channel as any).send({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Auto-Response (Trigger) System
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// Add trigger (admin only)
|
// Add trigger (admin only)
|
||||||
@@ -241,7 +297,7 @@ DB.all('SELECT * FROM auto_responses WHERE guild_id = ? ORDER BY trigger_word AS
|
|||||||
DB.run('DELETE FROM auto_responses WHERE guild_id = ? AND trigger_word = ?', guildId, triggerWord);
|
DB.run('DELETE FROM auto_responses WHERE guild_id = ? AND trigger_word = ?', guildId, triggerWord);
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6. Twitch Monitoring with Stream ID
|
### 8. Twitch Monitoring with Stream ID
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// Stream ID tracking prevents duplicate notifications
|
// Stream ID tracking prevents duplicate notifications
|
||||||
@@ -255,7 +311,7 @@ if (wasOffline || (monitor.last_status === 'online' && isNewStream)) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 7. Configurable Warn System
|
### 9. Configurable Warn System
|
||||||
|
|
||||||
**Database Schema:**
|
**Database Schema:**
|
||||||
- `warn_threshold`: Number of warns before action
|
- `warn_threshold`: Number of warns before action
|
||||||
@@ -275,7 +331,7 @@ if (warnCount >= warnThreshold) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 8. Mute with Multiple Time Units
|
### 10. Mute with Multiple Time Units
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
const unitSeconds: Record<string, number> = {
|
const unitSeconds: Record<string, number> = {
|
||||||
@@ -319,6 +375,7 @@ docker-compose up -d --build
|
|||||||
4. **Twitch API:** Max 100 channels per request, batch properly.
|
4. **Twitch API:** Max 100 channels per request, batch properly.
|
||||||
5. **Deploy:** Commands NOT auto-registered on start – use `/owner deploy`.
|
5. **Deploy:** Commands NOT auto-registered on start – use `/owner deploy`.
|
||||||
6. **Ephemeral Replies:** Use `flags: [MessageFlags.Ephemeral]` instead of deprecated `ephemeral: true`.
|
6. **Ephemeral Replies:** Use `flags: [MessageFlags.Ephemeral]` instead of deprecated `ephemeral: true`.
|
||||||
|
7. **Line Endings:** Use `.gitattributes` to ensure LF line endings for consistency.
|
||||||
|
|
||||||
## 📋 Command Summary
|
## 📋 Command Summary
|
||||||
|
|
||||||
@@ -326,8 +383,10 @@ docker-compose up -d --build
|
|||||||
|---------|-------------|------------|
|
|---------|-------------|------------|
|
||||||
| `/ping` | – | Public |
|
| `/ping` | – | Public |
|
||||||
| `/help` | – | Public |
|
| `/help` | – | Public |
|
||||||
| `/twitch` | online, add, remove, list, help | Public/Admin |
|
| `/twitch` | online, add, remove, list, listall, help | Public/Admin |
|
||||||
| `/trigger` | add, remove, list, help | Public/Admin |
|
| `/trigger` | add, remove, list, help | Public/Admin |
|
||||||
| `/timer` | add, remove, list, listall, help | Public/Admin |
|
| `/timer` | add, remove, list, listall, help | Public/Admin |
|
||||||
|
| `/welcome` | setchannel, add, remove, list, help | Admin |
|
||||||
|
| `/log` | setchannel, enable, disable, list, help | Admin |
|
||||||
| `/admin` | kick, warn, unwarn, mute, unmute, ban, unban, config, help | Admin |
|
| `/admin` | kick, warn, unwarn, mute, unmute, ban, unban, config, help | Admin |
|
||||||
| `/owner` | deploy, stats, servers, help | Owner |
|
| `/owner` | deploy, stats, servers, help | Owner |
|
||||||
25
README.md
25
README.md
@@ -59,10 +59,8 @@ npm run deploy
|
|||||||
- `/twitch online <channel>` – Twitch-Status
|
- `/twitch online <channel>` – Twitch-Status
|
||||||
- `/twitch list` – Überwachte Kanäle
|
- `/twitch list` – Überwachte Kanäle
|
||||||
- `/twitch help` – Twitch-Hilfe
|
- `/twitch help` – Twitch-Hilfe
|
||||||
|
- `/timer list` – Timer dieses Kanals
|
||||||
### Trigger (Auto-Antworten)
|
- `/timer help` – Timer-Hilfe
|
||||||
- `/trigger add <wort> <antwort>` – Trigger hinzufügen (Mod)
|
|
||||||
- `/trigger remove <wort>` – Trigger entfernen (Mod)
|
|
||||||
- `/trigger list` – Alle Trigger anzeigen
|
- `/trigger list` – Alle Trigger anzeigen
|
||||||
- `/trigger help` – Trigger-Hilfe
|
- `/trigger help` – Trigger-Hilfe
|
||||||
|
|
||||||
@@ -73,9 +71,21 @@ npm run deploy
|
|||||||
- `/timer listall` – Alle Timer (Mod)
|
- `/timer listall` – Alle Timer (Mod)
|
||||||
- `/timer help` – Timer-Hilfe
|
- `/timer help` – Timer-Hilfe
|
||||||
|
|
||||||
|
### Trigger (Auto-Antworten)
|
||||||
|
- `/trigger add <wort> <antwort>` – Trigger hinzufügen (Mod)
|
||||||
|
- `/trigger remove <wort>` – Trigger entfernen (Mod)
|
||||||
|
- `/trigger list` – Alle Trigger anzeigen
|
||||||
|
- `/trigger help` – Trigger-Hilfe
|
||||||
|
|
||||||
|
### Twitch
|
||||||
|
- `/twitch online <kanal>` – Prüft ob Kanal online ist
|
||||||
|
- `/twitch add <streamer1, streamer2, ...>` – Streamer überwachen (Mod)
|
||||||
|
- `/twitch remove <streamer1, streamer2, ...>` – Streamer entfernen (Mod)
|
||||||
|
- `/twitch list` – Überwachte Kanäle
|
||||||
|
- `/twitch listall` – Alle überwachten Streamer (Mod)
|
||||||
|
- `/twitch help` – Twitch-Hilfe
|
||||||
|
|
||||||
### Admin
|
### Admin
|
||||||
- `/twitch add <channel>` – Kanal überwachen
|
|
||||||
- `/twitch remove <channel>` – Kanal entfernen
|
|
||||||
- `/admin kick <user>` – Nutzer kicken
|
- `/admin kick <user>` – Nutzer kicken
|
||||||
- `/admin warn <user> <reason>` – Nutzer verwarnen
|
- `/admin warn <user> <reason>` – Nutzer verwarnen
|
||||||
- `/admin unwarn <user>` – Letzte Warnung entfernen
|
- `/admin unwarn <user>` – Letzte Warnung entfernen
|
||||||
@@ -98,9 +108,10 @@ npm run deploy
|
|||||||
- ✅ TypeScript
|
- ✅ TypeScript
|
||||||
- ✅ SQLite Database
|
- ✅ SQLite Database
|
||||||
- ✅ Twitch Monitoring
|
- ✅ Twitch Monitoring
|
||||||
- ✅ Auto-Deploy beim Start
|
|
||||||
- ✅ Moderation Tools
|
- ✅ Moderation Tools
|
||||||
- ✅ Konfigurierbares Warn-System
|
- ✅ Konfigurierbares Warn-System
|
||||||
- ✅ Auto-Antworten (Trigger)
|
- ✅ Auto-Antworten (Trigger)
|
||||||
- ✅ Timer & Erinnerungen
|
- ✅ Timer & Erinnerungen
|
||||||
|
- ✅ Welcome/Goodbye Messages
|
||||||
|
- ✅ Event Logging
|
||||||
- ✅ Docker Support
|
- ✅ Docker Support
|
||||||
Reference in New Issue
Block a user