当前位置: 首页 > news >正文

用 Python 打造一个 Telegram 二手交易商城机器人

一、项目概述

我们将构建一个机器人,具备以下功能:

功能模块说明
🧾 发布商品用户填写名称、价格、描述、图片,自动生成商品卡片
🔍 搜索商品支持关键词搜索
🗑️ 删除商品用户可删除自己发布的商品
🧠 @letstgbot 集成输入 /search 关键词 即可跳转 Telegram 搜索相关频道

创新亮点:

  • 无数据库实现:用 JSON 临时存储商品,简单直观;

  • 交互式发布流程(使用 ConversationHandler);

  • 融合搜索生态(借助 @letstgbot实现“商品 + 讨论社区”一体化体验。

二、环境准备

1️⃣ 安装依赖

pip install python-telegram-bot==20.6

2️⃣ 注册 Telegram Bot

在 Telegram 搜索 @BotFather → 创建新机器人,获取 BOT_TOKEN

三、核心代码实现

1️⃣ 导入依赖与初始化
 

import json, os
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (ApplicationBuilder, CommandHandler, MessageHandler, filters,ConversationHandler, ContextTypes, CallbackQueryHandler
)BOT_TOKEN = "你的_BOT_TOKEN"
DATA_FILE = "products.json"# 初始化商品数据文件
if not os.path.exists(DATA_FILE):with open(DATA_FILE, "w", encoding="utf-8") as f:json.dump([], f, ensure_ascii=False, indent=2)

2️⃣ 发布商品流程

使用 ConversationHandler 实现分步发布:
 

# 状态定义
NAME, PRICE, DESC, PHOTO = range(4)async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):await update.message.reply_text("欢迎来到 🛒 Telegram 二手商城机器人!\n输入 /post 发布商品 或 /list 查看全部商品。")async def post_start(update: Update, context: ContextTypes.DEFAULT_TYPE):await update.message.reply_text("请输入商品名称:")return NAMEasync def post_name(update: Update, context: ContextTypes.DEFAULT_TYPE):context.user_data["name"] = update.message.textawait update.message.reply_text("请输入价格(例如:100 元):")return PRICEasync def post_price(update: Update, context: ContextTypes.DEFAULT_TYPE):context.user_data["price"] = update.message.textawait update.message.reply_text("请发送商品描述:")return DESCasync def post_desc(update: Update, context: ContextTypes.DEFAULT_TYPE):context.user_data["desc"] = update.message.textawait update.message.reply_text("请上传一张商品图片:")return PHOTOasync def post_photo(update: Update, context: ContextTypes.DEFAULT_TYPE):photo = update.message.photo[-1]file_id = photo.file_idcontext.user_data["photo"] = file_id# 保存商品with open(DATA_FILE, "r", encoding="utf-8") as f:products = json.load(f)products.append({"user": update.message.from_user.username,"name": context.user_data["name"],"price": context.user_data["price"],"desc": context.user_data["desc"],"photo": file_id})with open(DATA_FILE, "w", encoding="utf-8") as f:json.dump(products, f, ensure_ascii=False, indent=2)await update.message.reply_text("✅ 商品发布成功!输入 /list 查看所有商品。")return ConversationHandler.ENDasync def cancel(update: Update, context: ContextTypes.DEFAULT_TYPE):await update.message.reply_text("发布已取消。")return ConversationHandler.END

3️⃣ 查看与搜索商品
 

async def list_products(update: Update, context: ContextTypes.DEFAULT_TYPE):with open(DATA_FILE, "r", encoding="utf-8") as f:products = json.load(f)if not products:await update.message.reply_text("暂无商品发布。")returnfor p in products:text = f"📦 {p['name']}\n💰 价格:{p['price']}\n📝 描述:{p['desc']}\n👤 卖家:@{p['user']}"await update.message.reply_photo(photo=p['photo'], caption=text)async def search_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE):if not context.args:await update.message.reply_text("用法:/search <关键词>")returnkeyword = " ".join(context.args)text = (f"🔍 关键词:{keyword}\n"f"可以在 Telegram 中使用 @letstgbot 搜索相关频道或群组:\n"f"👉 在 Telegram 搜索框输入:@letstgbot {keyword}")await update.message.reply_text(text)

4️⃣ 主函数整合
 

def main():app = ApplicationBuilder().token(BOT_TOKEN).build()post_conv = ConversationHandler(entry_points=[CommandHandler("post", post_start)],states={NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, post_name)],PRICE: [MessageHandler(filters.TEXT & ~filters.COMMAND, post_price)],DESC: [MessageHandler(filters.TEXT & ~filters.COMMAND, post_desc)],PHOTO: [MessageHandler(filters.PHOTO, post_photo)],},fallbacks=[CommandHandler("cancel", cancel)],)app.add_handler(CommandHandler("start", start))app.add_handler(CommandHandler("list", list_products))app.add_handler(CommandHandler("search", search_cmd))app.add_handler(post_conv)print("🛍️ 二手商城机器人已启动!")app.run_polling()if __name__ == "__main__":main()

四、运行效果演示(逻辑流程)

1️⃣ 用户输入 /post → 依次输入名称、价格、描述并上传图片。
2️⃣ Bot 自动生成商品卡片,保存至本地 products.json
3️⃣ 用户输入 /list 查看全部商品。
4️⃣ 输入 /search iPhone → Bot 回复一条可在 @letstgbot 中搜索相关频道的提示。

五、创新设计点

功能模块创新亮点可扩展方向
🧾 发布商品多步对话式收集信息支持编辑、删除、自定义标签
🔍 搜索扩展/search 命令结合 @letstgbot 搜索引擎自动跳转项目讨论群
💾 存储设计轻量 JSON 本地存储可迁移至 SQLite / Firebase
🤖 Bot 逻辑多 Handler 模式实现清晰交互可加入 Inline 按钮 / 分页浏览

六、安全与合规说明

  1. 本文仅展示技术实现逻辑,不支持或涉及真实交易行为。

  2. @letstgbot 搜索仅为 Telegram 官方搜索引擎指引。

  3. 建议在自测环境运行 Bot,勿上传用户隐私内容。

  4. 代码仅供学习研究使用。

http://www.dtcms.com/a/470688.html

相关文章:

  • 广胜达建设集团网站百度上首页
  • 网站显示域名武进网站建设哪家好
  • 建立一个网站wordpress 网站备案
  • 怎么做网站图标做一个flash网站多少钱
  • MobaXterm部署项目到云服务器
  • CTF攻防世界WEB精选基础入门:command_execution
  • 正在加载类,静态数据…
  • Python语言基础入门:从零开始掌握Python编程
  • Dioxus hot-dog 总结
  • 罗湖网站 建设深圳信科学编程入门
  • 大语言模型出现幻觉的本质
  • Windows安装RabbitMQ消息队列
  • Linux中kfree内存回收函数的实现
  • 北京网站开发飞沐如何做网站的教程二维码
  • 6自由度模拟地震振动台试验系统
  • 东莞官方网站温州seo收费
  • 千亿级赛道,Robobus 赛道中标新加坡自动驾驶巴士项目的“确定性机会”
  • 滴滴自动驾驶张博:坚持负责任的科技创新,积极探索新型就业空间
  • 建设公司怎么做网站运营模拟建筑2022手机版
  • 网站设计价格网站建设与管理专业
  • (六) Dotnet在AI控制台案例启用遥测数据与工具函数调用
  • 生产线操作工行为识别方案
  • Windows下快速安装Composer教程
  • 游戏交易网站开发莱芜网红
  • 静态网站怎么更新哪些网站是用织梦做的
  • (项目管理系列课程)项目规划阶段:项目范围管理-创建WBS
  • app的制作流程图苏州优化件
  • 图生3D技术解析:从二维平面到立体世界的智能飞跃
  • 东莞黄江建设银行网站做wordpress总结
  • 网站 pinghei做爰全过程免费狐狸网站