This commit is contained in:
Gefaehrbert
2024-05-18 04:13:47 +02:00
parent 72b55a4bda
commit 743f917bc3
6 changed files with 63 additions and 70 deletions

View File

@@ -1,17 +1,14 @@
# Verwende die neueste LTS-Version von Node.js
FROM node:18-alpine
FROM python:3.9-slim
# Erstelle und setze das Arbeitsverzeichnis
WORKDIR /usr/src/app
# Set the working directory
WORKDIR /app
# Kopiere package.json und package-lock.json (falls vorhanden)
COPY package*.json ./
# Copy the requirements.txt and the script to the container
COPY requirements.txt .
COPY bot.py .
# Installiere die Abhängigkeiten
RUN npm install
# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Kopiere den Rest des Anwendungsverzeichnisses
COPY . .
# Definiere die Startkommandozeile für den Container
CMD [ "npm", "start" ]
# Run the bot
CMD ["python", "bot.py"]

52
bot.py Normal file
View File

@@ -0,0 +1,52 @@
import os
import discord
from discord.ext import commands
# Konfiguriere die Bot-Instanz
intents = discord.Intents.default()
intents.guilds = True
intents.voice_states = True
bot = commands.Bot(command_prefix='!', intents=intents)
# Bot-Token und Kategorie-IDs aus Umgebungsvariablen
TOKEN = os.getenv('BOT_TOKEN')
CATEGORY_IDS = os.getenv('CATEGORY_IDS').split(',')
JOINTOCREATE_CHANNEL_NAME = os.getenv('JOINTOCREATE_CHANNEL_NAME', 'Join to Create')
# Liste zur Speicherung der erstellten Kanäle
created_channels = []
join_to_create_channels = []
@bot.event
async def on_ready():
print('Bot is ready!')
# Erstellen der JoinToCreate-Kanäle in den angegebenen Kategorien
for category_id in CATEGORY_IDS:
category = bot.get_channel(int(category_id))
join_to_create_channel = await category.create_voice_channel(name=JOINTOCREATE_CHANNEL_NAME)
join_to_create_channels.append(join_to_create_channel.id)
print(f'JoinToCreate Channel created in category {category_id} with ID: {join_to_create_channel.id}')
@bot.event
async def on_voice_state_update(member, before, after):
global created_channels
# Prüfen, ob der Benutzer in einen JoinToCreate-Kanal wechselt
if after.channel and after.channel.id in join_to_create_channels:
# Erstelle einen neuen Sprachkanal
category = after.channel.category
new_channel = await category.create_voice_channel(name=f'🔊 {member.display_name}\'s Channel')
await member.move_to(new_channel)
# Markiere den Kanal als vom Bot erstellt
created_channels.append(new_channel.id)
# Prüfen, ob ein Kanal leer geworden ist und ob er vom Bot erstellt wurde
if before.channel and before.channel.id in created_channels and len(before.channel.members) == 0:
await before.channel.delete()
created_channels.remove(before.channel.id)
# Starte den Bot
bot.run(TOKEN)

View File

@@ -1,9 +0,0 @@
version: '3.8'
services:
join2create:
image: git.degnedict.de/bene/join2create:latest
environment:
- BOT_TOKEN=YourBotToken
- JOINTOCREATE_CHANNEL_ID=Your-Channel-ID
restart: unless-stopped

View File

@@ -1,35 +0,0 @@
const { Client, GatewayIntentBits, ChannelType } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildVoiceStates] });
const token = process.env.BOT_TOKEN;
const joinToCreateChannelId = process.env.JOINTOCREATE_CHANNEL_ID;
// Set to true if a channel was created by the bot
const CREATED_BY_BOT = 'created_by_bot';
client.once('ready', () => {
console.log('Ready!');
});
client.on('voiceStateUpdate', (oldState, newState) => {
if (newState.channelId === joinToCreateChannelId) {
newState.guild.channels.create({
name: `🔊 ${newState.member.displayName}'s Channel`,
type: ChannelType.GuildVoice,
parent: newState.channel.parentId,
reason: 'Created by JoinToCreate bot', // Add a reason when creating the channel
}).then(channel => {
newState.member.voice.setChannel(channel);
channel[CREATED_BY_BOT] = true; // Mark the channel as created by the bot
}).catch(console.error);
}
if (oldState.channel && oldState.channel.members.size === 0 && oldState.channel.id !== joinToCreateChannelId) {
// Check if the channel was created by the bot before deleting it
if (oldState.channel[CREATED_BY_BOT]) {
oldState.channel.delete().catch(console.error);
}
}
});
client.login(token);

View File

@@ -1,13 +0,0 @@
{
"name": "join2create",
"version": "1.0.0",
"description": "Simple Discord bot with join to create feature",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"discord.js": "^14.0.0"
}
}

1
requirements.txt Normal file
View File

@@ -0,0 +1 @@
discord.py