Funguy Plugin Enable/Disable feature per room, save to conf file
This commit is contained in:
parent
5d6ad98303
commit
41c59618cc
@ -10,3 +10,7 @@ blocklist = []
|
|||||||
admin_user = "@hashborgir:mozilla.org"
|
admin_user = "@hashborgir:mozilla.org"
|
||||||
prefix = "!"
|
prefix = "!"
|
||||||
config_file = "funguy.conf"
|
config_file = "funguy.conf"
|
||||||
|
|
||||||
|
[plugins.disabled]
|
||||||
|
"!uFhErnfpYhhlauJsNK:matrix.org" = [ "youtube-preview",]
|
||||||
|
"!vYcfWXpPvxeQvhlFdV:matrix.org" = []
|
||||||
|
67
funguy.py
67
funguy.py
@ -1,5 +1,8 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# funguy.py
|
|
||||||
|
"""
|
||||||
|
Funguy Bot Class
|
||||||
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
@ -8,22 +11,23 @@ import simplematrixbotlib as botlib
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
import time
|
import time
|
||||||
import sys
|
import sys
|
||||||
|
import toml
|
||||||
|
|
||||||
from plugins.config import FunguyConfig
|
from plugins.config import FunguyConfig
|
||||||
|
|
||||||
class FunguyBot:
|
class FunguyBot:
|
||||||
|
|
||||||
bot = None
|
|
||||||
config = None
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.PLUGINS_DIR = "plugins"
|
self.PLUGINS_DIR = "plugins"
|
||||||
self.PLUGINS = {}
|
self.PLUGINS = {}
|
||||||
self.config = None
|
self.config = None
|
||||||
self.bot = None
|
self.bot = None
|
||||||
|
self.disabled_plugins = {} # Dictionary to store disabled plugins for each room
|
||||||
self.load_dotenv()
|
self.load_dotenv()
|
||||||
self.setup_logging()
|
self.setup_logging()
|
||||||
self.load_plugins()
|
self.load_plugins()
|
||||||
self.load_config()
|
self.load_config()
|
||||||
|
self.load_disabled_plugins()
|
||||||
|
|
||||||
def load_dotenv(self):
|
def load_dotenv(self):
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
@ -54,6 +58,21 @@ class FunguyBot:
|
|||||||
def load_config(self):
|
def load_config(self):
|
||||||
self.config = FunguyConfig()
|
self.config = FunguyConfig()
|
||||||
|
|
||||||
|
def load_disabled_plugins(self):
|
||||||
|
if os.path.exists('funguy.conf'):
|
||||||
|
with open('funguy.conf', 'r') as f:
|
||||||
|
config_data = toml.load(f)
|
||||||
|
self.disabled_plugins = config_data.get('plugins', {}).get('disabled', {})
|
||||||
|
|
||||||
|
def save_disabled_plugins(self):
|
||||||
|
existing_config = {}
|
||||||
|
if os.path.exists('funguy.conf'):
|
||||||
|
with open('funguy.conf', 'r') as f:
|
||||||
|
existing_config = toml.load(f)
|
||||||
|
existing_config['plugins'] = {'disabled': self.disabled_plugins}
|
||||||
|
with open('funguy.conf', 'w') as f:
|
||||||
|
toml.dump(existing_config, f)
|
||||||
|
|
||||||
async def handle_commands(self, room, message):
|
async def handle_commands(self, room, message):
|
||||||
match = botlib.MessageMatch(room, message, self.bot, self.config.prefix)
|
match = botlib.MessageMatch(room, message, self.bot, self.config.prefix)
|
||||||
if match.is_not_from_this_bot() and match.prefix() and match.command("reload"):
|
if match.is_not_from_this_bot() and match.prefix() and match.command("reload"):
|
||||||
@ -63,7 +82,32 @@ class FunguyBot:
|
|||||||
else:
|
else:
|
||||||
await self.bot.api.send_text_message(room.room_id, "You are not authorized to reload plugins.")
|
await self.bot.api.send_text_message(room.room_id, "You are not authorized to reload plugins.")
|
||||||
|
|
||||||
|
if match.is_not_from_this_bot() and match.prefix() and match.command("disable"):
|
||||||
|
if str(message.sender) == self.config.admin_user:
|
||||||
|
args = match.args()
|
||||||
|
if len(args) != 2:
|
||||||
|
await self.bot.api.send_text_message(room.room_id, "Usage: !disable <plugin> <room_id>")
|
||||||
|
else:
|
||||||
|
plugin_name, room_id = args
|
||||||
|
await self.disable_plugin(room_id, plugin_name)
|
||||||
|
await self.bot.api.send_text_message(room.room_id, f"Plugin '{plugin_name}' disabled for room '{room_id}'")
|
||||||
|
else:
|
||||||
|
await self.bot.api.send_text_message(room.room_id, "You are not authorized to disable plugins.")
|
||||||
|
|
||||||
|
if match.is_not_from_this_bot() and match.prefix() and match.command("enable"):
|
||||||
|
if str(message.sender) == self.config.admin_user:
|
||||||
|
args = match.args()
|
||||||
|
if len(args) != 2:
|
||||||
|
await self.bot.api.send_text_message(room.room_id, "Usage: !enable <plugin> <room_id>")
|
||||||
|
else:
|
||||||
|
plugin_name, room_id = args
|
||||||
|
await self.enable_plugin(room_id, plugin_name)
|
||||||
|
await self.bot.api.send_text_message(room.room_id, f"Plugin '{plugin_name}' enabled for room '{room_id}'")
|
||||||
|
else:
|
||||||
|
await self.bot.api.send_text_message(room.room_id, "You are not authorized to enable plugins.")
|
||||||
|
|
||||||
for plugin_name, plugin_module in self.PLUGINS.items():
|
for plugin_name, plugin_module in self.PLUGINS.items():
|
||||||
|
if plugin_name not in self.disabled_plugins.get(room.room_id, []):
|
||||||
await plugin_module.handle_command(room, message, self.bot, self.config.prefix, self.config)
|
await plugin_module.handle_command(room, message, self.bot, self.config.prefix, self.config)
|
||||||
|
|
||||||
if match.is_not_from_this_bot() and match.prefix() and match.command("rehash"):
|
if match.is_not_from_this_bot() and match.prefix() and match.command("rehash"):
|
||||||
@ -77,6 +121,18 @@ class FunguyBot:
|
|||||||
del self.config
|
del self.config
|
||||||
self.config = FunguyConfig()
|
self.config = FunguyConfig()
|
||||||
|
|
||||||
|
async def disable_plugin(self, room_id, plugin_name):
|
||||||
|
if room_id not in self.disabled_plugins:
|
||||||
|
self.disabled_plugins[room_id] = []
|
||||||
|
if plugin_name not in self.disabled_plugins[room_id]:
|
||||||
|
self.disabled_plugins[room_id].append(plugin_name)
|
||||||
|
self.save_disabled_plugins()
|
||||||
|
|
||||||
|
async def enable_plugin(self, room_id, plugin_name):
|
||||||
|
if room_id in self.disabled_plugins and plugin_name in self.disabled_plugins[room_id]:
|
||||||
|
self.disabled_plugins[room_id].remove(plugin_name)
|
||||||
|
self.save_disabled_plugins()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
MATRIX_URL = os.getenv("MATRIX_URL")
|
MATRIX_URL = os.getenv("MATRIX_URL")
|
||||||
MATRIX_USER = os.getenv("MATRIX_USER")
|
MATRIX_USER = os.getenv("MATRIX_USER")
|
||||||
@ -93,3 +149,6 @@ class FunguyBot:
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
bot = FunguyBot()
|
bot = FunguyBot()
|
||||||
bot.run()
|
bot.run()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ async def fetch_youtube_info(youtube_url):
|
|||||||
|
|
||||||
async def handle_command(room, message, bot, prefix, config):
|
async def handle_command(room, message, bot, prefix, config):
|
||||||
match = botlib.MessageMatch(room, message, bot, prefix)
|
match = botlib.MessageMatch(room, message, bot, prefix)
|
||||||
if match.is_not_from_this_bot() and re.search(r'youtube\.com/watch\?v=', message.body) and room.room_id != '!uFhErnfpYhhlauJsNK:matrix.org':
|
if match.is_not_from_this_bot() and re.search(r'youtube\.com/watch\?v=', message.body): # and room.room_id != '!uFhErnfpYhhlauJsNK:matrix.org':
|
||||||
logging.info("YouTube link detected")
|
logging.info("YouTube link detected")
|
||||||
video_id_match = re.search(r'youtube\.com/watch\?v=([^\s]+)', message.body)
|
video_id_match = re.search(r'youtube\.com/watch\?v=([^\s]+)', message.body)
|
||||||
if video_id_match:
|
if video_id_match:
|
||||||
|
Loading…
Reference in New Issue
Block a user