chore: initial commit
This commit is contained in:
159
scripts/interact_with_bot.py
Normal file
159
scripts/interact_with_bot.py
Normal file
@@ -0,0 +1,159 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
交互式 Telegram BOT 测试工具
|
||||
"""
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import sys
|
||||
|
||||
BOT_TOKEN = "8410096573:AAFLJbWUp2Xog0oeoe7hfBlVqR7ChoSl9Pg"
|
||||
BASE_URL = f"https://api.telegram.org/bot{BOT_TOKEN}"
|
||||
|
||||
# 这里需要你的 Telegram 用户 ID
|
||||
# 可以通过向 @userinfobot 发送消息来获取
|
||||
YOUR_USER_ID = None
|
||||
|
||||
def get_updates(offset=None, timeout=30):
|
||||
"""获取消息更新"""
|
||||
params = {"timeout": timeout}
|
||||
if offset:
|
||||
params["offset"] = offset
|
||||
response = requests.get(f"{BASE_URL}/getUpdates", params=params)
|
||||
return response.json()
|
||||
|
||||
def send_message_to_user(user_id, text):
|
||||
"""向指定用户发送消息(作为 BOT)"""
|
||||
data = {
|
||||
"chat_id": user_id,
|
||||
"text": text
|
||||
}
|
||||
response = requests.post(f"{BASE_URL}/sendMessage", json=data)
|
||||
return response.json()
|
||||
|
||||
def format_message(msg):
|
||||
"""格式化消息显示"""
|
||||
from_user = msg.get('from', {})
|
||||
is_bot = from_user.get('is_bot', False)
|
||||
username = from_user.get('username', '')
|
||||
first_name = from_user.get('first_name', '')
|
||||
|
||||
sender = f"{'🤖 BOT' if is_bot else '👤 User'}"
|
||||
sender_name = username or first_name or 'Unknown'
|
||||
|
||||
text = msg.get('text', '')
|
||||
photo = msg.get('photo')
|
||||
document = msg.get('document')
|
||||
|
||||
result = [f"\n{'='*60}"]
|
||||
result.append(f"{sender} {sender_name}")
|
||||
result.append('-'*60)
|
||||
|
||||
if text:
|
||||
result.append(text)
|
||||
|
||||
if photo:
|
||||
result.append("[图片消息]")
|
||||
if msg.get('caption'):
|
||||
result.append(f"说明: {msg['caption']}")
|
||||
|
||||
if document:
|
||||
doc_name = document.get('file_name', 'unknown')
|
||||
result.append(f"[文档: {doc_name}]")
|
||||
if msg.get('caption'):
|
||||
result.append(f"说明: {msg['caption']}")
|
||||
|
||||
if 'reply_markup' in msg:
|
||||
markup = msg['reply_markup']
|
||||
if 'inline_keyboard' in markup:
|
||||
result.append("\n[内联按钮:]")
|
||||
for row in markup['inline_keyboard']:
|
||||
for btn in row:
|
||||
callback = btn.get('callback_data', btn.get('url', ''))
|
||||
result.append(f" [{btn.get('text')}] -> {callback}")
|
||||
|
||||
if 'keyboard' in markup:
|
||||
result.append("\n[回复键盘:]")
|
||||
for row in markup['keyboard']:
|
||||
row_buttons = []
|
||||
for btn in row:
|
||||
btn_text = btn.get('text') if isinstance(btn, dict) else str(btn)
|
||||
row_buttons.append(btn_text)
|
||||
result.append(f" {' | '.join(row_buttons)}")
|
||||
|
||||
result.append('='*60)
|
||||
return '\n'.join(result)
|
||||
|
||||
def main():
|
||||
print("=" * 60)
|
||||
print("Telegram BOT 交互式测试工具")
|
||||
print("=" * 60)
|
||||
|
||||
# 首先,我们需要找到一个有效的聊天
|
||||
print("\n正在查找活动聊天...")
|
||||
updates = get_updates(timeout=5)
|
||||
|
||||
active_chats = {}
|
||||
if updates.get('result'):
|
||||
for update in updates['result']:
|
||||
if 'message' in update:
|
||||
msg = update['message']
|
||||
chat_id = msg['chat']['id']
|
||||
chat_title = msg['chat'].get('title') or msg['chat'].get('first_name', str(chat_id))
|
||||
|
||||
if chat_id not in active_chats:
|
||||
active_chats[chat_id] = chat_title
|
||||
|
||||
if active_chats:
|
||||
print(f"\n找到 {len(active_chats)} 个活动聊天:")
|
||||
for i, (chat_id, title) in enumerate(active_chats.items(), 1):
|
||||
print(f" {i}. {title} (ID: {chat_id})")
|
||||
|
||||
print("\n提示: 要与 BOT 交互,请:")
|
||||
print("1. 在 Telegram 中打开 @openaiw_bot")
|
||||
print("2. 发送 /start 命令")
|
||||
print("3. 然后运行这个脚本来查看响应")
|
||||
else:
|
||||
print("\n没有找到活动聊天。")
|
||||
print("\n要开始测试,请:")
|
||||
print("1. 在 Telegram 中搜索 @openaiw_bot")
|
||||
print("2. 发送任意消息(例如 /start)")
|
||||
print("3. 然后重新运行这个脚本")
|
||||
|
||||
# 监听新消息
|
||||
print("\n" + "="*60)
|
||||
print("开始监听消息... (按 Ctrl+C 退出)")
|
||||
print("="*60)
|
||||
|
||||
last_update_id = None
|
||||
if updates.get('result'):
|
||||
last_update_id = updates['result'][-1]['update_id']
|
||||
|
||||
all_messages = []
|
||||
|
||||
try:
|
||||
while True:
|
||||
updates = get_updates(offset=last_update_id, timeout=30)
|
||||
|
||||
if updates.get('result'):
|
||||
for update in updates['result']:
|
||||
last_update_id = update['update_id'] + 1
|
||||
|
||||
if 'message' in update:
|
||||
msg = update['message']
|
||||
print(format_message(msg))
|
||||
all_messages.append(msg)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n\n" + "="*60)
|
||||
print("停止监听")
|
||||
print("="*60)
|
||||
|
||||
# 保存所有消息
|
||||
if all_messages:
|
||||
with open("bot_interaction_log.json", "w", encoding="utf-8") as f:
|
||||
json.dump(all_messages, f, indent=2, ensure_ascii=False)
|
||||
print(f"\n✓ 已保存 {len(all_messages)} 条消息到 bot_interaction_log.json")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user