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

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

相关推荐
setmoon21411 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
2401_8331977312 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
CoovallyAIHub12 小时前
多 Agent 手术推理框架:Agent 辩论+RAG 补上手术知识,零样本超越监督基线 14.6 个百分点
算法·架构·机器人
敏编程12 小时前
一天一个Python库:tomlkit - 轻松解析和操作TOML配置
python
2401_8796938712 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
yunyun3212313 小时前
机器学习模型部署:将模型转化为Web API
jvm·数据库·python
团子和二花13 小时前
openclaw平替之nanobot源码解析(七):Gateway与多渠道集成
python·gateway·agent·智能体·openclaw·nanobot
未知鱼13 小时前
Python安全开发之简易目录扫描器(含详细注释)
开发语言·python·安全
Be1k013 小时前
推荐一款语雀知识库批量导出工具
python·gui·工具·语雀·批量导出·原创
Sunshine for you14 小时前
如何用FastAPI构建高性能的现代API
jvm·数据库·python