Files
overub/modules/search/__init__.py
2025-12-21 17:12:32 +01:00

112 lines
3.9 KiB
Python

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 <query>",
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 <query>",
)
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 <query>",
)
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 <text>",
)
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 <word>",
)
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)