🤖 基于DeepSeek API的Telegram机器人
我这里只是简单实现,学习使用!
效果:


完整代码:
python
import asyncio
import aiohttp
import requests
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
from datetime import datetime
import os
# ====== 配置 ======
DEEPSEEK_API_KEY = "你的deepseek key"
BOT_TOKEN = "Telegram机器人token"
# ==================
def save_conversation(user_id, username, user_message, bot_response):
"""保存对话到日志文件"""
# 创建logs目录如果不存在
if not os.path.exists('logs'):
os.makedirs('logs')
# 生成文件名:YYYYMMDD.txt
today = datetime.now().strftime("%Y%m%d")
filename = f"logs/{today}.txt"
# 格式化时间
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 格式化对话内容
log_entry = f"""
{'='*60}
时间: {current_time}
用户ID: {user_id}
用户名: @{username if username else '未知用户'}
{'='*60}
[用户]:
{user_message}
[DeepSeek助手]:
{bot_response}
"""
# 写入文件
with open(filename, 'a', encoding='utf-8') as f:
f.write(log_entry)
# 同时在控制台打印
print(f"\n📝 对话已保存到 {filename}")
print(f"👤 用户: @{username if username else '未知用户'} ({user_id})")
print(f"💬 消息: {user_message[:50]}...")
print(f"🤖 回复长度: {len(bot_response)} 字符")
async def ask_deepseek_async(question):
"""异步调用DeepSeek API"""
url = "https://api.deepseek.com/chat/completions"
headers = {
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是一个18岁的女孩,聊条要有情感,你的主人是全宇宙最帅的星月,每次回答不超过500字。"},
{"role": "user", "content": question}
]
}
try:
async with aiohttp.ClientSession() as session:
async with session.post(url, headers=headers, json=data) as response:
result = await response.json()
return result["choices"][0]["message"]["content"]
except Exception as e:
return f"❌ API调用出错:{str(e)}"
async def start(update: Update, context):
"""处理/start命令"""
user = update.effective_user
print(f"🚀 用户 @{user.username} 启动了机器人")
welcome_text = "🤖 DeepSeek助手已就绪!直接发消息吧~"
await update.message.reply_text(welcome_text)
# 记录启动日志
save_conversation(
user_id=user.id,
username=user.username,
user_message="/start",
bot_response=welcome_text
)
async def handle_message(update: Update, context):
"""处理用户消息"""
user = update.effective_user
user_message = update.message.text
# 打印到控制台
print(f"\n📨 收到消息:")
print(f" 用户: @{user.username} ({user.id})")
print(f" 内容: {user_message}")
print(f" 时间: {datetime.now().strftime('%H:%M:%S')}")
# 立即回复正在思考
thinking = await update.message.reply_text("🤔 思考中...")
try:
# 异步调用API
print(f"🌐 调用DeepSeek API...")
answer = await ask_deepseek_async(user_message)
print(f"✅ API响应成功,长度: {len(answer)} 字符")
# 删除思考消息
await thinking.delete()
# 发送回答
if len(answer) > 4000:
# 长消息分段发送
chunks = [answer[i:i+4000] for i in range(0, len(answer), 4000)]
for i, chunk in enumerate(chunks):
await update.message.reply_text(f"({i+1}/{len(chunks)})\n{chunk}")
full_answer = answer
else:
await update.message.reply_text(answer)
full_answer = answer
# 保存对话日志
save_conversation(
user_id=user.id,
username=user.username,
user_message=user_message,
bot_response=full_answer
)
except Exception as e:
error_msg = f"❌ 错误:{str(e)}"
print(f"⚠️ 处理消息时出错: {e}")
await update.message.reply_text(error_msg)
# 保存错误日志
save_conversation(
user_id=user.id,
username=user.username,
user_message=user_message,
bot_response=f"错误: {str(e)}"
)
async def error_handler(update: Update, context):
"""错误处理"""
if update and update.effective_user:
user = update.effective_user
print(f"❌ 处理用户 @{user.username} 的消息时出错: {context.error}")
else:
print(f"❌ 未知错误: {context.error}")
def main():
"""主函数"""
print("=" * 60)
print("🤖 DeepSeek Telegram机器人启动")
print("=" * 60)
print(f"📅 日期: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"📁 日志目录: ./logs/")
print(f"📝 日志文件: {datetime.now().strftime('%Y%m%d')}.txt")
print("=" * 60)
print("📱 在Telegram中访问你的机器人并发送消息")
print("📊 所有对话将自动保存到日志文件")
print("🛑 按 Ctrl+C 停止")
print("=" * 60)
# 创建应用
app = Application.builder().token(BOT_TOKEN).build()
# 添加处理器
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
# 添加错误处理器
app.add_error_handler(error_handler)
# 启动轮询
app.run_polling(
drop_pending_updates=True,
close_loop=False
)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print(f"\n{'='*60}")
print("👋 机器人已停止")
print(f"📁 今日对话已保存到: logs/{datetime.now().strftime('%Y%m%d')}.txt")
print("=" * 60)
except Exception as e:
print(f"\n❌ 启动失败: {e}")
pip安装指令:
js
# 第一步:升级pip
pip install --upgrade pip
# 第二步:按顺序安装
pip install python-telegram-bot
pip install aiohttp
pip install requests
🤖 Telegram Bot Token 是什么?
TELEGRAM_BOT_TOKEN 是你创建的Telegram机器人的唯一身份凭证,就像:
- API密钥(访问Telegram平台的权限)
- 机器人的身份证
- 机器人的密码
🔧 如何获取这个Token?
步骤1:找BotFather(官方机器人)
- 在Telegram中搜索 @BotFather
- 或者直接打开:https://t.me/botfather
步骤2:创建新机器人
js
/newbot
↓
给你的机器人起个名字(用户看到的)
例如:DeepSeek助手
↓
设置机器人的用户名(必须以bot结尾)
例如:my_deepseek_bot
步骤3:获取Token
BotFather会给你返回一串类似这样的字符串:
text
1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh
这就是你的 TELEGRAM_BOT_TOKEN!

然后去搜索这个机器人就可以聊天了:
