基于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!

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

相关推荐
唐叔在学习1 天前
才知道python还可以这样发消息提醒的
后端·python·程序员
天天睡大觉1 天前
Python学习1
开发语言·python·学习
Johny_Zhao1 天前
黑客msfconsole渗透工具超详细使用说明
linux·python·网络安全·信息安全·渗透测试·云计算·系统运维·攻防演练
luoluoal1 天前
基于python的旅游景点方面级别情感分析语料库与模型(源码+文档)
python·mysql·django·毕业设计·源码
directx3d_beginner1 天前
ifcconvert转换ifc为Obj
开发语言·python
滴啦嘟啦哒1 天前
【机械臂】【视觉】一、加入摄像机并实现世界坐标与像素坐标的互相转换
python·深度学习·vla
YJlio1 天前
Sysinternals 学习笔记(15.0):系统信息工具总览——RAMMap、RU、CoreInfo 等一网打尽
开发语言·笔记·python·学习·django·pdf·硬件架构
Root_Smile1 天前
【Python】pip freeze用法
开发语言·python·pip
qq_12498707531 天前
基于Hadoop的黑龙江旅游景点推荐系统的设计与实现(源码+论文+部署+安装)
大数据·hadoop·分布式·python·信息可视化