from mautrix.util.config import BaseProxyConfig, ConfigUpdateHelper from maubot import Plugin, MessageEvent from maubot.handlers import command import aiohttp import asyncio from bs4 import BeautifulSoup import random class ChefMou(Plugin): async def start(self) -> None: self.on_external_config_update() async def get_site_content(self): async with aiohttp.ClientSession() as session: async with session.get("https://partoches.pustule.org") as resp: text = await resp.read() return BeautifulSoup(text.decode('iso-8859-1'), 'html.parser') @command.new("chefmou") @command.argument("pattern", pass_raw=True, required=False) async def morceau(self, evt: MessageEvent, pattern: str) -> None: loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) if not pattern: await evt.respond( """ !chefmou morceau -> Donne un morceau aléatoire !chefmou partition instru titre -> Renvoi le lien vers la partition de ce morceau pour cet instrument """ ) else: if pattern == "morceau": soup = await self.get_site_content() s = soup.findAll('th', background='/fond3.gif') ps = random.choice(s) await evt.respond(ps.text) elif pattern.__contains__("partition"): chunks = pattern.split(None, 2) if len(chunks) != 3 : await evt.respond( """ !chefmou morceau -> Donne un morceau aléatoire !chefmou partition instru titre -> Renvoi le lien vers la partition de ce morceau pour cet instrument """ ) loop.close() return soup = await self.get_site_content() s = soup.find('th', string=chunks[2]) if not s : await evt.respond("Morceau non trouvé") return t = s.parent.findAll('a') idx = 9 if chunks[1].lower() == "souba" or chunks[1].lower() == "soubassophone" or chunks[1].lower() == "sb": idx = 0 elif chunks[1].lower() == "basse" or chunks[1].lower() == "bs" : idx = 1 elif chunks[1].lower() == "trombone" or chunks[1].lower() == "tb": idx = 2 elif chunks[1].lower() == "trompette" or chunks[1].lower() == "tp": idx = 3 elif chunks[1].lower() == "sax" or chunks[1].lower() == "saxophone": idx = 4 elif chunks[1].lower() == "clarinette" or chunks[1].lower() == "cl": idx = 5 else: await evt.respond("Pas trouvé cet instru") loop.close() return await evt.respond("["+chunks[2]+ " " + chunks[1]+"]"+"()") else: await evt.respond("Nope !") loop.close()