diff --git a/bot/Dockerfile b/Dockerfile similarity index 91% rename from bot/Dockerfile rename to Dockerfile index 0a9f17a..4592140 100644 --- a/bot/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM python:3.12-slim RUN mkdir -p /app RUN mkdir -p /app/bin -COPY bot/. /app +COPY . /app COPY bin/storage.py /app/bin WORKDIR /app RUN pip install -r requirements.txt diff --git a/bin/storage.py b/bin/storage.py index 650ff55..5e2d4c0 100644 --- a/bin/storage.py +++ b/bin/storage.py @@ -1,10 +1,32 @@ class storage: - def __init__(self, serverid, db): - self.serverdb = db[str(serverid)] - - def db(self, module, key, value=None): - try : r = self.serverdb.find_one({"module": module}).get(key) - except AttributeError: r = None + def __init__(self, server_id, db): + self.server_id = str(server_id) + self.db = db + self.collection = db['turdbot'] # Replace with your actual collection name + + async def db(self, module, key=None, value=None): + document = await self.collection.find_one({"server_id": self.server_id}) + + if not document: + document = { + "server_id": self.server_id, + "modules": {} + } + + modules = document.get("modules", {}) + + if module not in modules: + modules[module] = {} + + if key is None: + return modules.get(module) + if value is not None: - self.serverdb.update_one({"module": module}, {"$set": {key: value}}, upsert=True) - return r \ No newline at end of file + modules[module][key] = value + await self.collection.update_one( + {"server_id": self.server_id}, + {"$set": {"modules": modules}}, + upsert=True + ) + + return modules[module].get(key) \ No newline at end of file diff --git a/bot/bot.py b/bot.py similarity index 64% rename from bot/bot.py rename to bot.py index 0f7eae1..2cb550b 100644 --- a/bot/bot.py +++ b/bot.py @@ -1,12 +1,9 @@ from os import environ as env import discord from discord.ext import bridge -import logging -from pymongo import MongoClient +from motor.motor_asyncio import AsyncIOMotorClient as MongoClient from bin.storage import storage -logging.basicConfig(filename="turdbot.log",level=logging.INFO) - bot = bridge.Bot( help_command=None, command_prefix="!", @@ -16,22 +13,20 @@ bot = bridge.Bot( name="you") ) -bot.load_extension("cogs.reply") +bot.load_extension("cogs.triggers") bot.load_extension("cogs.counting") bot.load_extension("cogs.settings") uri = f"mongodb://{env['DB_USERNAME']}:{env['DB_PASSWORD']}@{env['DB_HOST']}/?authSource=admin" bot.db = MongoClient(uri)["turdbot"] +bot.version = "4.0.0ALPHA" + @bot.event async def on_ready(): print("Logged in as") print(bot.user.name) print(bot.user.id) - # logging.info(f"Logged in as {bot.user} (ID: {bot.user.id})") - # for guild in bot.guilds: - # logging.info(f"Added {guild.name} (ID: {guild.id})") - # storage(guild.id, bot.db).update_guild() - + print("------") bot.run(env["BOT_TOKEN"]) \ No newline at end of file diff --git a/bot/cogs/reply.py b/bot/cogs/reply.py deleted file mode 100644 index a4b4bb5..0000000 --- a/bot/cogs/reply.py +++ /dev/null @@ -1,12 +0,0 @@ -from discord.ext import bridge, commands - -class Reply(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def reply(self, ctx, args): - await ctx.respond(args) - -def setup(bot): - bot.add_cog(Reply(bot)) \ No newline at end of file diff --git a/bot/cogs/counting.py b/cogs/counting.py similarity index 100% rename from bot/cogs/counting.py rename to cogs/counting.py diff --git a/bot/cogs/future.py b/cogs/future.py similarity index 100% rename from bot/cogs/future.py rename to cogs/future.py diff --git a/cogs/misc.py b/cogs/misc.py new file mode 100644 index 0000000..c5635c0 --- /dev/null +++ b/cogs/misc.py @@ -0,0 +1,14 @@ +from discord.ext import bridge, commands +from bin.storage import storage + +class Misc(commands.Cog): + def __init__(self, bot): + self.bot = bot + + @bridge.bridge_command() + async def ping(self, ctx): + await ctx.send(f"pong! {round(self.bot.latency * 1000)}ms") + + @bridge.bridge_command() + async def version(self, ctx): + await ctx.send(self.bot.version) \ No newline at end of file diff --git a/cogs/ping.py b/cogs/ping.py new file mode 100644 index 0000000..e69de29 diff --git a/bot/cogs/settings.py b/cogs/settings.py similarity index 100% rename from bot/cogs/settings.py rename to cogs/settings.py diff --git a/cogs/triggers.py b/cogs/triggers.py new file mode 100644 index 0000000..2317b78 --- /dev/null +++ b/cogs/triggers.py @@ -0,0 +1,19 @@ +from discord.ext import bridge, commands +from bin.storage import storage + +class Triggers(commands.Cog): + def __init__(self, bot): + self.bot = bot + + @commands.Cog.listener() + async def on_message(self, message): + if message.author.bot: + return + db = storage(message.guild.id, self.bot.db).db + if db('triggers', 'enabled'): + for trigger in db('triggers', 'triggers'): + if trigger.lower() in message.content.lower(): + await message.reply(db('triggers', 'response')) + +def setup(bot): + bot.add_cog(Triggers(bot)) \ No newline at end of file diff --git a/flask/Dockerfile b/flask/Dockerfile deleted file mode 100644 index 2bb1133..0000000 --- a/flask/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM python:3.12-slim -RUN mkdir -p /app -RUN mkdir -p /app/bin -COPY flask/. /app -COPY bin/storage.py /app/bin -WORKDIR /app -RUN pip install -r requirements.txt -ENTRYPOINT ["granian", "--port", "5005", "--interface", "wsgi", "app:app"] \ No newline at end of file diff --git a/flask/app.py b/flask/app.py deleted file mode 100644 index e017ec7..0000000 --- a/flask/app.py +++ /dev/null @@ -1,19 +0,0 @@ -from flask import Flask -from pymongo import MongoClient -from bin.storage import storage -from os import environ as env -import logging - -logging.basicConfig(level=logging.INFO) - -app = Flask(__name__) - -uri = f"mongodb://{env['DB_USERNAME']}:{env['DB_PASSWORD']}@{env['DB_HOST']}/?authSource=admin" -app.db = MongoClient(uri)["turdbot"] - - -@app.route("/") -def hello(): - db = storage(1004178748205187083,app.db).db - count = db('counting', 'count') - return f"Hello World! {count}" \ No newline at end of file diff --git a/flask/requirements.txt b/flask/requirements.txt deleted file mode 100644 index b74b9aa..0000000 --- a/flask/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -granian -flask -pymongo \ No newline at end of file diff --git a/bot/requirements.txt b/requirements.txt similarity index 65% rename from bot/requirements.txt rename to requirements.txt index c59fc63..70335db 100644 --- a/bot/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ py-cord[audio] pymongo -PyNaCl \ No newline at end of file +PyNaCl +motor \ No newline at end of file