mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-18 13:52:07 +08:00
添加新命令并优化关键词过滤机制
- 在bot_commands.py中添加新的'/deletecontaining'命令,允许用户删除所有包含指定词语的关键词。 - 更新guard.py以处理新命令,并微调消息过滤逻辑,限制重复链接的分享。 - 在link_filter.py中实现关键词的子字符串删除功能,并优化匹配和删除逻辑。
This commit is contained in:
parent
c1be5d9e0f
commit
1dd2c3a57c
@ -7,6 +7,7 @@ async def register_commands(client, admin_id):
|
||||
BotCommand('add', '添加新的关键词'),
|
||||
BotCommand('delete', '删除现有的关键词'),
|
||||
BotCommand('list', '列出所有当前的关键词'),
|
||||
BotCommand('deletecontaining', '删除所有包含指定词语的关键词'),
|
||||
BotCommand('addwhite', '添加域名到白名单'),
|
||||
BotCommand('delwhite', '从白名单移除域名'),
|
||||
BotCommand('listwhite', '列出白名单域名'),
|
||||
|
@ -67,7 +67,7 @@ async def process_message(event, client):
|
||||
logger.info(f"Message should be filtered: {event.message.text}")
|
||||
if event.sender_id != ADMIN_ID:
|
||||
await event.delete()
|
||||
notification = await event.respond("已撤回该消息。注:已置顶项目分享链接, 二次分享链接, 都会被撤回.")
|
||||
notification = await event.respond("已撤回该消息。注:一个链接不能发两次.")
|
||||
asyncio.create_task(delete_message_after_delay(client, event.chat_id, notification, 3 * 60))
|
||||
return
|
||||
if new_links:
|
||||
@ -87,12 +87,12 @@ async def command_handler(event, link_filter):
|
||||
command, *args = event.message.text.split()
|
||||
command = command.lower()
|
||||
|
||||
if command in ['/add', '/delete', '/list']:
|
||||
if command in ['/add', '/delete', '/list', '/deletecontaining']:
|
||||
await link_filter.handle_keyword_command(event, command, args)
|
||||
elif command in ['/addwhite', '/delwhite', '/listwhite']:
|
||||
await link_filter.handle_whitelist_command(event, command, args)
|
||||
|
||||
if event.raw_text.startswith(('/add', '/delete', '/list', '/addwhite', '/delwhite', '/listwhite')):
|
||||
if event.raw_text.startswith(('/add', '/delete', '/deletecontaining','/list', '/addwhite', '/delwhite', '/listwhite')):
|
||||
link_filter.load_data_from_file()
|
||||
async def start_bot():
|
||||
async with TelegramClient('bot', api_id=6, api_hash='eb06d4abfb49dc3eeb1aeb98ae0f581e') as client:
|
||||
|
@ -96,6 +96,25 @@ class LinkFilter:
|
||||
return True
|
||||
return False
|
||||
|
||||
def remove_keywords_containing(self, substring):
|
||||
# 记录原始关键词列表的长度
|
||||
original_count = len(self.keywords)
|
||||
|
||||
# 创建一个列表,包含所有需要移除的关键词
|
||||
removed_keywords = [kw for kw in self.keywords if substring.lower() in kw.lower()]
|
||||
|
||||
# 修改关键词列表,仅保留不包含指定子字符串的关键词
|
||||
self.keywords = [kw for kw in self.keywords if substring.lower() not in kw.lower()]
|
||||
|
||||
# 如果有关键词被移除,则保存关键词列表并重新加载数据
|
||||
if removed_keywords:
|
||||
self.save_keywords()
|
||||
self.load_data_from_file()
|
||||
|
||||
# 返回被移除的关键词列表
|
||||
return removed_keywords
|
||||
|
||||
|
||||
|
||||
def should_filter(self, text):
|
||||
logger.debug(f"Checking text: {text}")
|
||||
@ -145,6 +164,13 @@ class LinkFilter:
|
||||
await event.reply(f"未找到精确匹配的关键词 '{keyword}'。\n\n以下是相似的关键词:\n" + "\n".join(similar_keywords))
|
||||
else:
|
||||
await event.reply(f"关键词 '{keyword}' 不存在。")
|
||||
elif command == '/deletecontaining' and args:
|
||||
substring = ' '.join(args)
|
||||
removed_keywords = self.remove_keywords_containing(substring)
|
||||
if removed_keywords:
|
||||
await event.reply(f"已删除包含 '{substring}' 的以下关键词:\n" + "\n".join(removed_keywords))
|
||||
else:
|
||||
await event.reply(f"没有找到包含 '{substring}' 的关键词。")
|
||||
else:
|
||||
await event.reply("无效的命令或参数。")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user