# plugins/cron.py import sqlite3 from crontab import CronTab import simplematrixbotlib as botlib # Database connection and cursor conn = sqlite3.connect('cron.db') cursor = conn.cursor() # Create table if not exists cursor.execute('''CREATE TABLE IF NOT EXISTS cron ( room_id TEXT, cron_entry TEXT, command TEXT )''') conn.commit() async def handle_command(room, message, bot, prefix, config): match = botlib.MessageMatch(room, message, bot, prefix) if match.is_not_from_this_bot() and match.prefix() and match.command("cron"): args = match.args() if len(args) >= 4: action = args[0] room_id = args[1] cron_entry = ' '.join(args[2:-1]) command = args[-1] if action == "add": add_cron(room_id, cron_entry, command) await bot.api.send_text_message(room.room_id, f"Cron added successfully") elif action == "remove": remove_cron(room_id, command) await bot.api.send_text_message(room.room_id, f"Cron removed successfully") else: await bot.api.send_text_message(room.room_id, "Usage: !cron add|remove room_id cron_entry command") def add_cron(room_id, cron_entry, command): # Check if the cron entry already exists in the database for the given room_id and command cursor.execute('SELECT * FROM cron WHERE room_id=? AND command=? AND cron_entry=?', (room_id, command, cron_entry)) existing_entry = cursor.fetchone() if existing_entry: return # Cron entry already exists, do not add duplicate # Insert the cron entry into the database cursor.execute('INSERT INTO cron (room_id, cron_entry, command) VALUES (?, ?, ?)', (room_id, cron_entry, command)) conn.commit() def remove_cron(room_id, command): cursor.execute('DELETE FROM cron WHERE room_id=? AND command=?', (room_id, command)) conn.commit() async def run_cron_jobs(bot): cron = CronTab() for job in cron: cron_entry = str(job) for row in cursor.execute('SELECT * FROM cron WHERE cron_entry=?', (cron_entry,)): room_id, _, command = row room = await bot.api.get_room_by_id(room_id) if room: plugin_name = command.split()[0].replace(prefix, '') # Extract plugin name plugin_module = bot.plugins.get(plugin_name) if plugin_module: await plugin_module.handle_command(room, None, bot, prefix, config)