Skip to content

Commit

Permalink
add delete method, send as file if too long
Browse files Browse the repository at this point in the history
  • Loading branch information
BennyThink committed Jan 1, 2024
1 parent 0b485fd commit d34f89c
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 6 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ Issues regarding this have been reported years ago but have yet to be resolved.
/start - Start the bot
/ping - Check if the bot is alive
/help - Show help message and search syntax
/delete - Delete all messages from specific chat
/bot - Search messages from bots
/channel - Search messages from channels
/group - Search messages from groups
Expand Down
22 changes: 20 additions & 2 deletions searchgram/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

import argparse
import logging
from io import BytesIO
from typing import Tuple

from pyrogram import Client, enums, filters, types
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
Expand Down Expand Up @@ -71,6 +73,14 @@ def ping_handler(client: "Client", message: "types.Message"):
client.send_message(message.chat.id, text, parse_mode=enums.ParseMode.MARKDOWN)


@app.on_message(filters.command(["delete"]))
@private_use
def clean_handler(client: "Client", message: "types.Message"):
client.send_chat_action(message.chat.id, enums.ChatAction.TYPING)
text = tgdb.ping()
client.send_message(message.chat.id, text, parse_mode=enums.ParseMode.MARKDOWN)


def get_name(chat: dict):
if chat.get("title"):
return chat["title"]
Expand Down Expand Up @@ -129,7 +139,7 @@ def generate_navigation(page, total_pages):
return markup


def parse_and_search(text, page=1):
def parse_and_search(text, page=1) -> Tuple[str, InlineKeyboardMarkup | None]:
# return text and markup
args = parser.parse_args(text.split())
_type = args.type
Expand Down Expand Up @@ -174,7 +184,15 @@ def type_search_handler(client: "Client", message: "types.Message"):
def search_handler(client: "Client", message: "types.Message"):
client.send_chat_action(message.chat.id, enums.ChatAction.TYPING)
text, markup = parse_and_search(message.text)
message.reply_text(text, quote=True, parse_mode=enums.ParseMode.MARKDOWN, reply_markup=markup)
if len(text) > 4096:
logging.warning("Message too long, sending as file instead")
file = BytesIO(text.encode())
file.name = "search_result.txt"
message.reply_text("Your search result is too long, sending as file instead", quote=True)
message.reply_document(file, quote=True, parse_mode=enums.ParseMode.MARKDOWN, reply_markup=markup)
file.close()
else:
message.reply_text(text, quote=True, parse_mode=enums.ParseMode.MARKDOWN, reply_markup=markup)


@app.on_callback_query(filters.regex(r"n|p"))
Expand Down
12 changes: 9 additions & 3 deletions searchgram/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@ def set_uid(message) -> "dict":
return data

@staticmethod
def check_ignore(message):
def get_config_list():
config.read("sync.ini")
blacklist = config.options("blacklist")
whitelist = config.options("whitelist")
return config.options("whitelist"), config.options("blacklist")

@staticmethod
def check_ignore(message):
whitelist, blacklist = BasicSearchEngine().get_config_list()
uid = str(message.chat.id)
chat_type = message.chat.type.name # upper case
username = getattr(message.chat, "username", None)
Expand Down Expand Up @@ -141,3 +144,6 @@ def ping(self) -> str:

def clear_db(self):
pass

def delete_user(self, user):
pass
12 changes: 11 additions & 1 deletion searchgram/meili.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,17 @@ def ping(self):
def clear_db(self):
self.client.index("telegram").delete()

def delete_user(self, user):
params = {
"filter": [f"chat.username = {user} OR chat.id = {user}"],
"hitsPerPage": 1000,
}

data = self.client.index("telegram").search("", params)
for hit in data["hits"]:
self.client.delete_index(hit["ID"])


if __name__ == "__main__":
search = SearchEngine()
print(search.search("猫"))
print(search.delete_user("InfSGK_bot"))
3 changes: 3 additions & 0 deletions searchgram/mongo.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,6 @@ def ping(self) -> str:

def clear_db(self):
self.client.drop_database("telegram")

def delete_user(self, user):
self.chat.delete_many({"$or": [{"chat.username": user}, {"chat.id": user}]})
3 changes: 3 additions & 0 deletions searchgram/zinc.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ def clear_db(self):
api_instance = index.Index(api_client)
api_instance.delete(INDEX)

def delete_user(self, user):
raise NotImplementedError


if __name__ == "__main__":
engine = SearchEngine()
Expand Down

0 comments on commit d34f89c

Please sign in to comment.