一个为 KiraAI 聊天机器人开发的天气查询插件,通过爬取中国天气网(www.weather.com.cn)提供中国城市的天气信息。
- ✅ 支持查询中国主要城市的天气信息
- ✅ 支持多日期查询(今天、明天、后天)
- ✅ 智能缓存机制,减少网络请求
- ✅ 支持命令触发和自然语言触发
- ✅ 支持所有者默认城市功能(隐私保护)
- ✅ 支持温度范围显示(最低~最高)
- ✅ 支持天气条件转换(如"晴转多云")
- ✅ 支持清除缓存功能
- ✅ 支持中英文命令
- ✅ 基于用户 ID 的权限控制(支持 QQ、Telegram 等多平台)
将插件文件夹 weather 复制到 KiraAI 的 data/plugins 目录下。
在 weather 插件文件夹目录下运行以下命令安装插件依赖(注意需要在虚拟环境中运行):
pip install -r requirements.txt在 KiraAI 的 WebUI 配置页面或 data/config/plugins/weather.json 中配置:
{
"cache_expiry_hours": 6,
"proxy": "",
"command_prefix": "/",
"enable_natural_language": true,
"allowed_sessions": [],
"owner_city": "",
"owner_id": ""
}| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cache_expiry_hours |
整数 | 6 | 缓存过期时间(小时)。天气数据将缓存此时间后从网络刷新。 |
proxy |
字符串 | null | 可选代理服务器 URL,如 "http://127.0.0.1:7890" |
command_prefix |
字符串 | "/" | 命令前缀,用于触发天气查询 |
enable_natural_language |
布尔值 | true | 是否启用自然语言触发 |
allowed_sessions |
列表 | [] | 允许使用的会话列表,格式为 <adapter_name>:<gm/dm>:<session_id>,留空则允许所有会话 |
owner_city |
字符串 | "" | Bot 所有者的默认城市,所有者查询天气时未指定城市将使用此城市,留空则禁用此功能 |
owner_id |
字符串 | "" | Bot 所有者的用户ID(支持QQ号、Telegram用户ID等)。所有者可以在任意会话中清除缓存和不带城市的天气查询。留空则禁用此功能 |
中文命令:
/天气- 查询所有者默认城市的今天天气(仅限所有者)/天气 北京- 查询北京今天的天气/天气 上海 明天- 查询上海明天的天气/天气 广州 后天- 查询广州后天的天气/天气 清除缓存- 清除所有天气缓存(仅限所有者)
英文命令:
/weather- 查询所有者默认城市的今天天气(仅限所有者)/weather 北京- 查询北京今天的天气/weather 上海 tomorrow- 查询上海明天的天气/weather 广州 the day after tomorrow- 查询广州后天的天气/weather clear cache- 清除所有天气缓存(仅限所有者)
如果启用了自然语言触发(enable_natural_language: true),可以直接使用自然语言查询天气:
- "今天天气怎么样?" - 查询所有者默认城市的今天天气(仅限所有者)
- "北京天气" - 查询北京今天的天气
- "上海明天天气" - 查询上海明天的天气
- "广州后天天气" - 查询广州后天的天气
- "今天下雨吗?" - 查询所有者默认城市的今天天气(仅限所有者)
普通用户查询:
用户: /天气 北京
Bot: 北京今天晴,气温 15~25℃,<3级,湿度 45%,空气质量良。
所有者查询(使用默认城市):
所有者: /天气
Bot: 今天晴,气温 15~25℃,<3级,湿度 45%,空气质量良。
Bot 所有者可以设置默认城市,在不说出城市名的情况下查询天气,保护隐私。
配置步骤:
- 在配置文件
weather.json中设置owner_city为你的城市(如 "桂林") - 在
owner_id中填写你的用户ID(QQ号如 "123456789",Telegram用户ID如 "123456789") - 重启 KiraAI
使用示例:
- 所有者在任意会话中说:"今天天气" → Bot 返回:"桂林今天晴,气温 15°C ~ 25°C,东南风 2 级,湿度 45%,空气质量良。"
- 所有者在任意会话中说:"/天气" → Bot 返回:"桂林今天晴,气温 15°C ~ 25°C,东南风 2 级,湿度 45%,空气质量良。"
注意事项:
- 只有
owner_id对应的用户才能使用此功能 - 其他用户必须指定城市名才能查询天气
- 此功能保护所有者的位置隐私,避免在群聊中暴露城市
- 所有者可以在任意会话(包括群聊和私聊)中使用此功能
Bot 所有者可以清除所有天气缓存数据,强制重新获取最新天气信息。
使用方法:
- 所有者在任意会话中说:"/天气 清除缓存" → Bot 返回:"已清除 5 条天气缓存数据"
- 所有者在任意会话中说:"/weather clear cache" → Bot 返回:"已清除 5 条天气缓存数据"
注意事项:
- 只有
owner_id对应的用户才能使用此功能 - 其他用户尝试清除缓存会收到权限提示
- 清除缓存后,下次查询天气时会重新从网络获取数据
- 此功能适用于需要强制更新天气数据的场景
- 所有者可以在任意会话(包括群聊和私聊)中使用此功能
插件支持基于用户 ID 的权限控制,兼容多平台:
-
普通用户:
- 可以查询天气(必须指定城市名)
- 不能清除缓存
-
所有者(通过
owner_id配置):- 可以查询天气(可以使用默认城市,不暴露城市名)
- 可以清除缓存
- 可以在任意会话中使用所有功能
| 平台 | 用户ID类型 | 示例 |
|---|---|---|
| QQ号 | 2946204414 |
|
| Telegram | Telegram用户ID | 123456789 |
| 其他 | 平台用户唯一标识 | - |
{
"owner_city": "桂林",
"owner_id": "2946204414"
}插件内置了中国主要城市的代码映射,存储在 city_code.json 文件中。如果需要添加新的城市,可以编辑此文件。
格式:
{
"城市名": "城市代码"
}例如:
{
"北京": "101010100",
"上海": "101020100",
"广州": "101280101"
}插件使用以下目录存储数据:
- 缓存文件:
<KiraAI数据目录>/plugin_data/weather/weather_cache.json - 城市代码:
<插件目录>/city_code.json
此插件使用网络爬虫技术从中国天气网(www.weather.com.cn)获取天气信息。此爬虫方案仅供学习交流使用,稳定性与法律风险由使用者自行承担,与开发者无关。
使用本插件前,请确保:
- 遵守中国天气网的使用条款和服务协议
- 遵守相关法律法规
- 合理控制请求频率,避免对服务器造成过大压力
- 不得用于商业用途
- 不得侵犯网站的合法权益
- 检查依赖是否正确安装:
pip install -r requirements.txt - 检查配置文件格式是否正确
- 查看日志文件获取详细错误信息
- 检查网络连接
- 检查城市名是否正确
- 检查城市代码映射文件是否存在
- 查看日志文件获取详细错误信息
- 检查缓存文件路径是否正确
- 检查文件权限
- 尝试清除缓存后重新查询
- 确认
owner_id配置正确 - 确认用户ID格式正确(字符串格式)
- 检查日志中的权限验证信息
- 支持多平台用户ID权限控制(QQ、Telegram等)
- 配置项
owner_qq更名为owner_id - 更新文档支持多平台说明
- 迁移到
data/plugins目录 - 使用
get_data_path()避免硬编码路径 - 优化网络请求性能
- 修复温度解析问题
- 添加所有者城市功能(隐私保护)
- 添加温度范围显示
- 添加天气条件转换支持
- 添加缓存清除功能
- 改进权限控制为基于 QQ 号
- 优化温度解析逻辑
- 改进天气条件提取
- 修复日期处理问题
- 添加缓存机制
- 优化网络请求
- 改进错误处理
- 添加自然语言触发
- 改进城市代码映射
- 优化响应格式
- 初始版本
- 基本天气查询功能
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 查看 KiraAI 文档
本插件仅供学习交流使用,请遵守相关法律法规。