🔍 为什么会出现这么多"社工库机器人"?
在 Telegram 里,很多人希望通过机器人来查询各种信息。所谓的"社工库 BOT",本质就是:
接收用户输入(查询关键字)
去数据库检索(是否有匹配结果)
返回查询结果(文本/链接/截图等)
🛠 技术原理
核心流程分 3 步:
用户发消息给机器人
机器人在数据库里查找匹配项
将结果返回用户 / 审核群
可以用到的技术栈:
Python
Telethon(Telegram API)
SQLite(轻量数据库)
💻 Python 脚本示例
下面是一份可运行的最简版脚本:
pythonfrom telethon import TelegramClient, events import sqlite3, os API_ID = int(os.getenv("API_ID", "123456")) API_HASH = os.getenv("API_HASH", "your_api_hash") BOT_TOKEN = os.getenv("BOT_TOKEN", "your_bot_token") DB_FILE = "data.db" client = TelegramClient("search_bot", API_ID, API_HASH).start(bot_token=BOT_TOKEN) # 初始化数据库 def init_db(): conn = sqlite3.connect(DB_FILE) c = conn.cursor() c.execute("""CREATE TABLE IF NOT EXISTS records ( id INTEGER PRIMARY KEY AUTOINCREMENT, keyword TEXT, result TEXT )""") conn.commit() conn.close() init_db() # 插入一些测试数据 def seed_data(): conn = sqlite3.connect(DB_FILE) c = conn.cursor() data = [ ("电影", "推荐频道:https://t.me/lets_movie"), ("学习", "优质群组:https://t.me/lets_study"), ("聊天", "中文群搜索机器人:@letstgbot") ] for k, v in data: c.execute("INSERT INTO records (keyword, result) VALUES (?, ?)", (k, v)) conn.commit() conn.close() seed_data() # 查询数据库 def search_db(keyword): conn = sqlite3.connect(DB_FILE) c = conn.cursor() c.execute("SELECT result FROM records WHERE keyword LIKE ?", ('%' + keyword + '%',)) results = c.fetchall() conn.close() return [r[0] for r in results] @client.on(events.NewMessage(pattern="/start")) async def start(event): await event.respond("👋 欢迎使用免费检索机器人!\n\n直接输入关键词即可查询。") @client.on(events.NewMessage) async def search(event): query = event.text.strip() results = search_db(query) if results: msg = "🔍 查询结果:\n\n" + "\n".join(results) else: msg = "❌ 没有找到相关记录,可以尝试其他关键词。" await event.respond(msg) print("机器人已启动...") client.run_until_disconnected()
📌 使用效果
用户输入:
学习机器人返回:
优质群组:https://t.me/lets_study用户输入:
聊天机器人返回:
中文群搜索机器人:@letstgbot这样一来,读者就能理解"社工库机器人"的工作原理,其实和普通的搜索机器人一模一样。