diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4f509e5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +*.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 19ddb21..0fefda2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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"] diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..1c146a3 --- /dev/null +++ b/bot.py @@ -0,0 +1,32 @@ +import os +import discord +from discord.ext import commands + +intents = discord.Intents.default() +intents.guilds = True +intents.voice_states = True + +bot = commands.Bot(command_prefix='!', intents=intents) + +token = os.getenv('BOT_TOKEN') +join_to_create_channel_id = int(os.getenv('JOINTOCREATE_CHANNEL_ID')) + +@bot.event +async def on_ready(): + print('Ready!') + +@bot.event +async def on_voice_state_update(member, before, after): + if after.channel and after.channel.id == join_to_create_channel_id: + new_channel = await after.channel.guild.create_voice_channel( + name=f"🔊 {member.display_name}'s Channel", + category=after.channel.category, + reason='Created by JoinToCreate bot' + ) + await member.move_to(new_channel) + + if before.channel and len(before.channel.members) == 0 and before.channel.id != join_to_create_channel_id: + if before.channel.name.startswith('🔊'): + await before.channel.delete(reason='No members left in the bot-created channel') + +bot.run(token) diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 2768604..0000000 --- a/docker-compose.yml +++ /dev/null @@ -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 diff --git a/index.js b/index.js deleted file mode 100644 index ce1ebea..0000000 --- a/index.js +++ /dev/null @@ -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); diff --git a/package.json b/package.json deleted file mode 100644 index 4820c26..0000000 --- a/package.json +++ /dev/null @@ -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" - } - } - \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..503dba9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +discord.py \ No newline at end of file