телифон связь поиск в интернате
This commit is contained in:
1 parent
d78c1b55c0
commit
374c01458d
6 files changed
+206
-23
No files matched your search
+83
@@ -2,6 +2,7 @@ import re
|
||||
import time
|
||||
import shelve
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
from aiogram.methods import AnswerGuestQuery, SendPoll
|
||||
from aiogram.types import InlineQueryResultArticle, InputTextMessageContent, InputRichMessageContent, InputRichMessage, Message
|
||||
@@ -571,3 +572,85 @@ def set_group_setting(
|
||||
|
||||
db[group_id] = settings
|
||||
|
||||
|
||||
def apply_time_tags(text):
|
||||
now = datetime.now()
|
||||
text = text.replace("{{date}}", now.strftime("%d.%m.%Y"))
|
||||
text = text.replace("{{time}}", now.strftime("%H:%M"))
|
||||
text = text.replace("{{now}}", now.strftime("%d.%m.%Y %H:%M"))
|
||||
return text
|
||||
|
||||
|
||||
def web_search(query):
|
||||
r = requests.get(
|
||||
"https://lite.duckduckgo.com/lite/",
|
||||
params={"q": query},
|
||||
headers={"User-Agent": "Mozilla/5.0"},
|
||||
timeout=10
|
||||
)
|
||||
r.raise_for_status()
|
||||
links = re.findall(r"<a[^>]*class=['\"]result-link['\"][^>]*>(.*?)</a>", r.text, re.DOTALL)
|
||||
snippets = re.findall(r"<td[^>]*class=['\"]result-snippet['\"][^>]*>(.*?)</td>", r.text, re.DOTALL)
|
||||
results = []
|
||||
for i in range(min(5, len(links))):
|
||||
title = re.sub(r"<[^>]+>", "", links[i]).strip()
|
||||
snippet = re.sub(r"<[^>]+>", "", snippets[i]).strip()[:300] if i < len(snippets) else ""
|
||||
results.append(f"{title}\n{snippet}")
|
||||
if not results:
|
||||
return "ничего не нашлось"
|
||||
return "\n\n".join(results)
|
||||
|
||||
|
||||
def wiki_search(query):
|
||||
r = requests.get(
|
||||
"https://ru.wikipedia.org/w/rest.php/v1/search/page",
|
||||
params={"q": query, "limit": 3},
|
||||
headers={"User-Agent": "uzbekgpt/1.0"},
|
||||
timeout=10
|
||||
)
|
||||
r.raise_for_status()
|
||||
results = []
|
||||
for p in r.json().get("pages", []):
|
||||
title = p.get("title", "")
|
||||
excerpt = re.sub(r"<[^>]+>", "", p.get("excerpt", ""))
|
||||
results.append(f"{title}\n{excerpt[:400]}")
|
||||
if not results:
|
||||
return "ничего не нашлось в википедии"
|
||||
return "\n\n".join(results)
|
||||
|
||||
|
||||
def extract_tool(text):
|
||||
m = re.search(r"<search>(.*?)</search>", text, re.DOTALL)
|
||||
if m:
|
||||
return "search", m.group(1).strip()
|
||||
m = re.search(r"<wiki>(.*?)</wiki>", text, re.DOTALL)
|
||||
if m:
|
||||
return "wiki", m.group(1).strip()
|
||||
return None
|
||||
|
||||
|
||||
def add_tokens(user_id, input_t, output_t):
|
||||
with shelve.open("tokens") as db:
|
||||
key = str(user_id)
|
||||
data = db.get(key, {"input": 0, "output": 0, "requests": 0})
|
||||
data["input"] += input_t
|
||||
data["output"] += output_t
|
||||
data["requests"] += 1
|
||||
db[key] = data
|
||||
|
||||
|
||||
def get_tokens(user_id):
|
||||
with shelve.open("tokens") as db:
|
||||
return db.get(str(user_id), {"input": 0, "output": 0, "requests": 0})
|
||||
|
||||
|
||||
async def alert_admin(bot, provider_name, error_text):
|
||||
current = time.time()
|
||||
if provider_name in provider_alert_time and current - provider_alert_time[provider_name] < 600:
|
||||
return
|
||||
provider_alert_time[provider_name] = current
|
||||
try:
|
||||
await bot.send_message(ADMIN_ID, f"🚨 провайдер `{provider_name}` кажется упал:\n{str(error_text)[:300]}")
|
||||
except Exception as e:
|
||||
print(f" -- alert admin - {e}")
|
||||
|
||||
Reference in new issue
Block a user