Initial commit: Telegram 天气预报机器人

This commit is contained in:
2026-09-27 18:35:10 +08:00
commit 984bb893eb
3 changed files with 98 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
# Weather Bot
Telegram 天气预报机器人,支持查询全球城市天气。
## 功能
- 🌤 查询指定城市实时天气
- 🌡 显示温度、湿度、风速
- 🌍 支持全球城市
## 安装
```bash
pip install -r requirements.txt
```
## 配置
设置环境变量:
```bash
export BOT_TOKEN="your_telegram_bot_token"
export WEATHER_API_KEY="your_openweathermap_api_key"
```
## 运行
```bash
python3 bot.py
```
## 使用
- `/start` - 开始使用
- `/weather 北京` - 查询北京天气
- `/help` - 查看帮助
+61
View File
@@ -0,0 +1,61 @@
#!/usr/bin/env python3
"""Telegram 天气预报机器人"""
import os
import requests
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
# 从环境变量获取 Token 和 API Key
BOT_TOKEN = os.environ.get("BOT_TOKEN", "your_bot_token_here")
WEATHER_API_KEY = os.environ.get("WEATHER_API_KEY", "your_api_key_here")
WEATHER_URL = "https://api.openweathermap.org/data/2.5/weather"
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"🌤 天气预报机器人\n\n"
"使用方法:\n"
"/weather 城市名 - 查询天气\n"
"/help - 查看帮助"
)
async def weather(update: Update, context: ContextTypes.DEFAULT_TYPE):
city = " ".join(context.args) if context.args else "Beijing"
try:
params = {"q": city, "appid": WEATHER_API_KEY, "units": "metric", "lang": "zh_cn"}
r = requests.get(WEATHER_URL, params=params, timeout=10)
data = r.json()
if r.status_code == 200:
temp = data["main"]["temp"]
desc = data["weather"][0]["description"]
humidity = data["main"]["humidity"]
wind = data["wind"]["speed"]
await update.message.reply_text(
f"📍 {city} 天气\n"
f"🌡 温度:{temp}°C\n"
f"🌥 天气:{desc}\n"
f"💧 湿度:{humidity}%\n"
f"💨 风速:{wind} m/s"
)
else:
await update.message.reply_text(f"❌ 未找到城市「{city}」")
except Exception as e:
await update.message.reply_text(f"❌ 查询失败:{e}")
async def help_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"📖 帮助\n\n"
"/start - 开始使用\n"
"/weather <城市> - 查询天气\n"
"/help - 查看帮助"
)
def main():
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("weather", weather))
app.add_handler(CommandHandler("help", help_cmd))
print("Bot started...")
app.run_polling()
if __name__ == "__main__":
main()
+2
View File
@@ -0,0 +1,2 @@
python-telegram-bot>=20.0
requests>=2.28