from core.module import Module class SearchModule(Module): name = "search" version = "0.1.0" description = "Search commands" async def on_load(self) -> None: builder = self.commands @builder.command( name="google", description="Stub web search", category="search", usage=".google ", example=".google overub", ) async def google_cmd(event, args): query = " ".join(args) if not query: await event.reply("Query required") return url = f"https://api.duckduckgo.com/?q={query}&format=json&no_redirect=1" data = await self.app.http.get_json(url) if not data: await event.reply("Search unavailable") return text = data.get("AbstractText") or data.get("Heading") or "No result" await event.reply(text) @builder.command( name="wiki", description="Stub wiki search", category="search", usage=".wiki ", ) async def wiki_cmd(event, args): query = " ".join(args) if not query: await event.reply("Query required") return url = f"https://en.wikipedia.org/api/rest_v1/page/summary/{query}" data = await self.app.http.get_json(url) if not data: await event.reply("Wiki unavailable") return extract = data.get("extract") await event.reply(extract or "No result") @builder.command( name="yt", description="Stub YouTube search", category="search", usage=".yt ", ) async def yt_cmd(event, args): query = " ".join(args) key = self.app.config.get().get("services", {}).get("youtube_api_key") if not key: await event.reply("YouTube API key missing") return url = ( "https://www.googleapis.com/youtube/v3/search" f"?part=snippet&q={query}&maxResults=1&key={key}" ) data = await self.app.http.get_json(url) if not data or not data.get("items"): await event.reply("No results") return item = data["items"][0] title = item["snippet"]["title"] await event.reply(title) @builder.command( name="translate", description="Stub translation", category="search", usage=".translate ", ) async def translate_cmd(event, args): text = " ".join(args) url = self.app.config.get().get("services", {}).get("translate_url") if not url: await event.reply("Translate URL missing") return payload_url = f"{url}?q={text}" data = await self.app.http.get_json(payload_url) if not data: await event.reply("Translation unavailable") return await event.reply(str(data)) @builder.command( name="define", description="Stub dictionary", category="search", usage=".define ", ) async def define_cmd(event, args): word = args[0] if args else "" if not word: await event.reply("Word required") return url = f"https://api.dictionaryapi.dev/api/v2/entries/en/{word}" data = await self.app.http.get_json(url) if not data or isinstance(data, dict) and data.get("title"): await event.reply("Definition not found") return meaning = data[0]["meanings"][0]["definitions"][0]["definition"] await event.reply(meaning)