基于DeepSeek API的Telegram机器人

🤖 基于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(官方机器人)

步骤2:创建新机器人

js 复制代码
/newbot
↓
给你的机器人起个名字(用户看到的)
例如:DeepSeek助手
↓
设置机器人的用户名(必须以bot结尾)
例如:my_deepseek_bot

步骤3:获取Token

BotFather会给你返回一串类似这样的字符串:

text 复制代码
1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh

这就是你的 TELEGRAM_BOT_TOKEN!

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

相关推荐
WangYaolove131410 小时前
基于opencv的疲劳检测系(源码+文档)
python·mysql·django·毕业设计·源码
90的程序爱好者10 小时前
flask入门
后端·python·flask
历程里程碑10 小时前
滑动窗口----滑动窗口最大值
javascript·数据结构·python·算法·排序算法·哈希算法·散列表
码农三叔10 小时前
(7-3-02)电机与执行器系统:驱动器开发与控制接口(2)实时通信总线设计+33自由度人形机器人的双信道EtherCAT主设备架构
人工智能·机器人·人形机器人
心语星光11 小时前
用python语言的pyautogui库实现伪批量将xdf文件打印为pdf文件
开发语言·python·pdf·自动化
七夜zippoe11 小时前
Kubernetes与Python微服务编排实战:从基础部署到自动扩缩容
python·微服务·kubernetes·service·hpa
idwangzhen11 小时前
GEO优化系统哪家好
python·信息可视化
Remember_99311 小时前
Java 工厂方法模式:解耦对象创建的优雅方案
java·开发语言·python·算法·工厂方法模式
IRevers11 小时前
RF-DETR:第一个在COCO上突破60AP的DETR(含检测和分割推理)
图像处理·人工智能·python·深度学习·目标检测·计算机视觉
自可乐11 小时前
AutoGen(多智能体AI框架)全面学习教程
人工智能·python·学习·ai