refactor code

This commit is contained in:
hibiki
2021-07-30 21:21:51 +08:00
parent 2ad891aa1e
commit cc24822dca
165 changed files with 7815 additions and 8174 deletions
+20 -65
View File
@@ -1,6 +1,6 @@
from nonebot import on_regex
from .data_source import get_weather_of_city
from nonebot.adapters.cqhttp import Bot, Event
from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent
from jieba import posseg
from services.log import logger
from nonebot.typing import T_State
@@ -8,7 +8,7 @@ from .config import city_list
import re
from utils.utils import get_message_text
__plugin_name__ = '天气查询'
__plugin_name__ = "天气查询"
__plugin_usage__ = "普普通通的查天气吧\n示例:北京天气"
@@ -16,15 +16,15 @@ weather = on_regex(r".*?(.*)市?的?天气.*?", priority=5, block=True)
@weather.handle()
async def _(bot: Bot, event: Event, state: T_State):
async def _(bot: Bot, event: MessageEvent, state: T_State):
msg = get_message_text(event.json())
msg = re.search(r'.*?(.*)市?的?天气.*?', msg)
msg = re.search(r".*?(.*)市?的?天气.*?", msg)
msg = msg.group(1)
if msg[-1] == '的':
if msg[-1] == "的":
msg = msg[:-1]
if msg[-1] != '市':
msg += '市'
city = ''
if msg[-1] != "市":
msg += "市"
city = ""
if msg:
citys = []
for x in city_list.keys():
@@ -33,65 +33,20 @@ async def _(bot: Bot, event: Event, state: T_State):
for word in posseg.lcut(msg):
if word.word in city_list.keys():
await weather.finish("不要查一个省的天气啊,这么大查起来很累人的..", at_sender=True)
if word.flag == 'ns' or word.word[:-1] in citys:
if word.flag == "ns" or word.word[:-1] in citys:
city = str(word.word).strip()
break
if word.word == '火星':
await weather.finish('没想到你个小呆子还真的想看火星天气!\n火星大气中含有95%的二氧化碳,气压低,加之极度的干燥,'
'就阻止了水的形成积聚。这意味着火星几乎没有云,冰层覆盖了火星的两极,它们的融化和冻结受到火星与太'
'阳远近距离的影响,它产生了强大的尘埃云,阻挡了太阳光,使冰层的融化慢下来。\n所以说火星天气太恶劣了,'
'去过一次就不想再去第二次了')
if word.word == "火星":
await weather.finish(
"没想到你个小呆子还真的想看火星天气!\n火星大气中含有95%的二氧化碳,气压低,加之极度的干燥,"
"就阻止了水的形成积聚。这意味着火星几乎没有云,冰层覆盖了火星的两极,它们的融化和冻结受到火星与太"
"阳远近距离的影响,它产生了强大的尘埃云,阻挡了太阳光,使冰层的融化慢下来。\n所以说火星天气太恶劣了,"
"去过一次就不想再去第二次了"
)
if city:
city_weather = await get_weather_of_city(city)
logger.info(f'(USER {event.user_id}, GROUP {event.group_id if event.message_type != "private" else "private"} ) '
f'查询天气:' + city)
logger.info(
f'(USER {event.user_id}, GROUP {event.group_id if isinstance(event, GroupMessageEvent) else "private"} ) '
f"查询天气:" + city
)
await weather.finish(city_weather)
# if str(event.get_message()).strip() == '天气':
# state['city'] = '-1'
# return
# msg = str(event.get_message()).strip()
# print(msg)
# flag = True
# if msg.find('开启') != -1 or msg.find('关闭') != -1:
# state['city'] = '-1'
# return
# if msg.startswith('天气'):
# if not msg.endswith('市'):
# state['city'] = msg[2:] + '市'
# else:
# state['city'] = msg[2:]
# flag = False
# elif msg.find('的天气') != -1:
# i = msg.find('的天气')
# msg = msg[:i] + '市' + msg[i:]
# elif msg.find('天气') != -1:
# i = msg.find('天气')
# msg = msg[:i] + '市' + msg[i:]
# if msg != "天气" and flag:
# print(posseg.lcut(msg))
# for word in posseg.lcut(msg):
# if word.word in city_list.keys():# and word.word in ['北京', '上海', '天津', '重庆', '台湾']:
# await weather.finish("不要查一个省的天气啊,这么大查起来很累人的..", at_sender=True)
# if word.flag == 'ns':
# state["city"] = word.word
# break
# if word.word == '火星':
# await weather.finish('没想到你个小呆子还真的想看火星天气!\n火星大气中含有95%的二氧化碳,气压低,加之极度的干燥,'
# '就阻止了水的形成积聚。这意味着火星几乎没有云,冰层覆盖了火星的两极,它们的融化和冻结受到火星与太'
# '阳远近距离的影响,它产生了强大的尘埃云,阻挡了太阳光,使冰层的融化慢下来。\n所以说火星天气太恶劣了,'
# '去过一次就不想再去第二次了')
# @weather.got("city", prompt="你想查询哪个城市的天气呢?")
# async def _(bot: Bot, event: Event, state: dict):
# if state['city'] == '-1' or not state['city'].strip():
# return
# if state['city'] in ['取消', '算了']:
# await weather.finish('已取消此次调用..')
# if state['city'][-1] != '市':
# state['city'] += '市'
# city_weather = await get_weather_of_city(state['city'].strip())
# logger.info(f'(USER {event.user_id}, GROUP {event.group_id if event.message_type != "private" else "private"} ) '
# f'查询天气:' + state['city'])
# await weather.finish(city_weather)
+326 -33
View File
@@ -1,34 +1,327 @@
city_list = {
"北京": ["北京"],
"天津": ["天津"],
"山西": ["太原", "阳泉", "晋城", "长治", "临汾", "运城", "忻州", "吕梁", "晋中", "大同", "朔州"],
"河北": ["沧州", "石家庄", "唐山", "保定", "廊坊", "衡水", "邯郸", "邢台", "张家口", "辛集", "秦皇岛", "定州", "承德", "涿州"],
"山东": ["济南", "淄博", "聊城", "德州", "滨州", "济宁", "菏泽", "枣庄", "烟台", "威海", "泰安", "青岛", "临沂", "莱芜", "东营", "潍坊", "日照"],
"河南": ["郑州", "新乡", "鹤壁", "安阳", "焦作", "濮阳", "开封", "驻马店", "商丘", "三门峡", "南阳", "洛阳", "周口", "许昌", "信阳", "漯河", "平顶山", "济源"],
"广东": ["珠海", "中山", "肇庆", "深圳", "清远", "揭阳", "江门", "惠州", "河源", "广州", "佛山", "东莞", "潮州", "汕尾", "梅州", "阳江", "云浮", "韶关", "湛江", "汕头", "茂名"],
"浙江": ["舟山", "温州", "台州", "绍兴", "衢州", "宁波", "丽水", "金华", "嘉兴", "湖州", "杭州"],
"宁夏": ["中卫", "银川", "吴忠", "石嘴山", "固原"],
"江苏": ["镇江", "扬州", "盐城", "徐州", "宿迁", "无锡", "苏州", "南通", "南京", "连云港", "淮安", "常州", "泰州"],
"湖南": ["长沙", "邵阳", "怀化", "株洲", "张家界", "永州", "益阳", "湘西", "娄底", "衡阳", "郴州", "岳阳", "常德", "湘潭"],
"吉林": ["长春", "长春", "通化", "松原", "四平", "辽源", "吉林", "延边", "白山", "白城"],
"福建": ["漳州", "厦门", "福州", "三明", "莆田", "宁德", "南平", "龙岩", "泉州"],
"甘肃": ["张掖", "陇南", "兰州", "嘉峪关", "白银", "武威", "天水", "庆阳", "平凉", "临夏", "酒泉", "金昌", "甘南", "定西"],
"陕西": ["榆林", "西安", "延安", "咸阳", "渭南", "铜川", "商洛", "汉中", "宝鸡", "安康"],
"辽宁": ["营口", "铁岭", "沈阳", "盘锦", "辽阳", "锦州", "葫芦岛", "阜新", "抚顺", "丹东", "大连", "朝阳", "本溪", "鞍山"],
"江西": ["鹰潭", "宜春", "上饶", "萍乡", "南昌", "景德镇", "吉安", "抚州", "新余", "九江", "赣州"],
"黑龙江": ["伊春", "七台河", "牡丹江", "鸡西", "黑河", "鹤岗", "哈尔滨", "大兴安岭", "绥化", "双鸭山", "齐齐哈尔", "佳木斯", "大庆"],
"安徽": ["宣城", "铜陵", "六安", "黄山", "淮南", "合肥", "阜阳", "亳州", "安庆", "池州", "宿州", "芜湖", "马鞍山", "淮北", "滁州", "蚌埠"],
"湖北": ["孝感", "武汉", "十堰", "荆门", "黄冈", "襄阳", "咸宁", "随州", "黄石", "恩施", "鄂州", "荆州", "宜昌", "潜江", "天门", "神农架", "仙桃"],
"青海": ["西宁", "海西", "海东", "玉树", "黄南", "海南", "海北", "果洛"],
"新疆": ["乌鲁木齐", "克州", "阿勒泰", "五家渠", "石河子", "伊犁", "吐鲁番", "塔城", "克拉玛依", "喀什", "和田", "哈密", "昌吉", "博尔塔拉", "阿克苏", "巴音郭楞", "阿拉尔", "图木舒克", "铁门关"],
"贵州": ["铜仁", "黔东南", "贵阳", "安顺", "遵义", "黔西南", "黔南", "六盘水", "毕节"],
"四川": ["遂宁", "攀枝花", "眉山", "凉山", "成都", "巴中", "广安", "自贡", "甘孜", "资阳", "宜宾", "雅安", "内江", "南充", "绵阳", "泸州", "凉山", "乐山", "广元", "甘孜", "德阳", "达州", "阿坝"],
"上海": ["上海"],
"广西": ["南宁", "贵港", "玉林", "梧州", "钦州", "柳州", "来宾", "贺州", "河池", "桂林", "防城港", "崇左", "北海", "百色"],
"西藏": ["拉萨", "山南", "日喀则", "那曲", "林芝", "昌都", "阿里"],
"云南": ["昆明", "红河", "大理", "玉溪", "昭通", "西双版纳", "文山", "曲靖", "普洱", "怒江", "临沧", "丽江", "红河", "迪庆", "德宏", "大理", "楚雄", "保山"],
"内蒙古": ["呼和浩特", "乌兰察布", "兴安", "赤峰", "呼伦贝尔", "锡林郭勒", "乌海", "通辽", "巴彦淖尔", "阿拉善", "鄂尔多斯", "包头"],
"海南": ["海口", "三沙", "三亚", "临高", "五指山", "陵水", "文昌", "万宁", "白沙", "乐东", "澄迈", "屯昌", "定安", "东方", "保亭", "琼中", "琼海", "儋州", "昌江"],
"重庆": ["重庆"],
"台湾": ["台北", "高雄", "基隆", "台中", "台南", "新竹", "嘉义", "新北", "桃园"]
}
"北京": ["北京"],
"天津": ["天津"],
"山西": ["太原", "阳泉", "晋城", "长治", "临汾", "运城", "忻州", "吕梁", "晋中", "大同", "朔州"],
"河北": [
"沧州",
"石家庄",
"唐山",
"保定",
"廊坊",
"衡水",
"邯郸",
"邢台",
"张家口",
"辛集",
"秦皇岛",
"定州",
"承德",
"涿州",
],
"山东": [
"济南",
"淄博",
"聊城",
"德州",
"滨州",
"济宁",
"菏泽",
"枣庄",
"烟台",
"威海",
"泰安",
"青岛",
"临沂",
"莱芜",
"东营",
"潍坊",
"日照",
],
"河南": [
"郑州",
"新乡",
"鹤壁",
"安阳",
"焦作",
"濮阳",
"开封",
"驻马店",
"商丘",
"三门峡",
"南阳",
"洛阳",
"周口",
"许昌",
"信阳",
"漯河",
"平顶山",
"济源",
],
"广东": [
"珠海",
"中山",
"肇庆",
"深圳",
"清远",
"揭阳",
"江门",
"惠州",
"河源",
"广州",
"佛山",
"东莞",
"潮州",
"汕尾",
"梅州",
"阳江",
"云浮",
"韶关",
"湛江",
"汕头",
"茂名",
],
"浙江": ["舟山", "温州", "台州", "绍兴", "衢州", "宁波", "丽水", "金华", "嘉兴", "湖州", "杭州"],
"宁夏": ["中卫", "银川", "吴忠", "石嘴山", "固原"],
"江苏": [
"镇江",
"扬州",
"盐城",
"徐州",
"宿迁",
"无锡",
"苏州",
"南通",
"南京",
"连云港",
"淮安",
"常州",
"泰州",
],
"湖南": [
"长沙",
"邵阳",
"怀化",
"株洲",
"张家界",
"永州",
"益阳",
"湘西",
"娄底",
"衡阳",
"郴州",
"岳阳",
"常德",
"湘潭",
],
"吉林": ["长春", "长春", "通化", "松原", "四平", "辽源", "吉林", "延边", "白山", "白城"],
"福建": ["漳州", "厦门", "福州", "三明", "莆田", "宁德", "南平", "龙岩", "泉州"],
"甘肃": [
"张掖",
"陇南",
"兰州",
"嘉峪关",
"白银",
"武威",
"天水",
"庆阳",
"平凉",
"临夏",
"酒泉",
"金昌",
"甘南",
"定西",
],
"陕西": ["榆林", "西安", "延安", "咸阳", "渭南", "铜川", "商洛", "汉中", "宝鸡", "安康"],
"辽宁": [
"营口",
"铁岭",
"沈阳",
"盘锦",
"辽阳",
"锦州",
"葫芦岛",
"阜新",
"抚顺",
"丹东",
"大连",
"朝阳",
"本溪",
"鞍山",
],
"江西": ["鹰潭", "宜春", "上饶", "萍乡", "南昌", "景德镇", "吉安", "抚州", "新余", "九江", "赣州"],
"黑龙江": [
"伊春",
"七台河",
"牡丹江",
"鸡西",
"黑河",
"鹤岗",
"哈尔滨",
"大兴安岭",
"绥化",
"双鸭山",
"齐齐哈尔",
"佳木斯",
"大庆",
],
"安徽": [
"宣城",
"铜陵",
"六安",
"黄山",
"淮南",
"合肥",
"阜阳",
"亳州",
"安庆",
"池州",
"宿州",
"芜湖",
"马鞍山",
"淮北",
"滁州",
"蚌埠",
],
"湖北": [
"孝感",
"武汉",
"十堰",
"荆门",
"黄冈",
"襄阳",
"咸宁",
"随州",
"黄石",
"恩施",
"鄂州",
"荆州",
"宜昌",
"潜江",
"天门",
"神农架",
"仙桃",
],
"青海": ["西宁", "海西", "海东", "玉树", "黄南", "海南", "海北", "果洛"],
"新疆": [
"乌鲁木齐",
"克州",
"阿勒泰",
"五家渠",
"石河子",
"伊犁",
"吐鲁番",
"塔城",
"克拉玛依",
"喀什",
"和田",
"哈密",
"昌吉",
"博尔塔拉",
"阿克苏",
"巴音郭楞",
"阿拉尔",
"图木舒克",
"铁门关",
],
"贵州": ["铜仁", "黔东南", "贵阳", "安顺", "遵义", "黔西南", "黔南", "六盘水", "毕节"],
"四川": [
"遂宁",
"攀枝花",
"眉山",
"凉山",
"成都",
"巴中",
"广安",
"自贡",
"甘孜",
"资阳",
"宜宾",
"雅安",
"内江",
"南充",
"绵阳",
"泸州",
"凉山",
"乐山",
"广元",
"甘孜",
"德阳",
"达州",
"阿坝",
],
"上海": ["上海"],
"广西": [
"南宁",
"贵港",
"玉林",
"梧州",
"钦州",
"柳州",
"来宾",
"贺州",
"河池",
"桂林",
"防城港",
"崇左",
"北海",
"百色",
],
"西藏": ["拉萨", "山南", "日喀则", "那曲", "林芝", "昌都", "阿里"],
"云南": [
"昆明",
"红河",
"大理",
"玉溪",
"昭通",
"西双版纳",
"文山",
"曲靖",
"普洱",
"怒江",
"临沧",
"丽江",
"红河",
"迪庆",
"德宏",
"大理",
"楚雄",
"保山",
],
"内蒙古": [
"呼和浩特",
"乌兰察布",
"兴安",
"赤峰",
"呼伦贝尔",
"锡林郭勒",
"乌海",
"通辽",
"巴彦淖尔",
"阿拉善",
"鄂尔多斯",
"包头",
],
"海南": [
"海口",
"三沙",
"三亚",
"临高",
"五指山",
"陵水",
"文昌",
"万宁",
"白沙",
"乐东",
"澄迈",
"屯昌",
"定安",
"东方",
"保亭",
"琼中",
"琼海",
"儋州",
"昌江",
],
"重庆": ["重庆"],
"台湾": ["台北", "高雄", "基隆", "台中", "台南", "新竹", "嘉义", "新北", "桃园"],
}
+13 -13
View File
@@ -1,21 +1,21 @@
import requests
from utils.init_result import image
from utils.message_builder import image
async def get_weather_of_city(city) -> str:
url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + city
url = "http://wthrcdn.etouch.cn/weather_mini?city=" + city
data_json = requests.get(url).json()
if 'desc' in data_json:
if data_json['desc'] == "invilad-citykey":
if "desc" in data_json:
if data_json["desc"] == "invilad-citykey":
return "你为啥不查火星的天气呢?小真寻只支持国内天气查询!!" + image("shengqi", "zhenxun")
elif data_json['desc'] == "OK":
w_type = data_json['data']['forecast'][0]['type']
w_max = data_json['data']['forecast'][0]['high'][3:]
w_min = data_json['data']['forecast'][0]['low'][3:]
fengli = data_json['data']['forecast'][0]['fengli'][9:-3]
ganmao = data_json['data']["ganmao"]
fengxiang = data_json['data']['forecast'][0]['fengxiang']
repass = f'{city}的天气是 {w_type} 天\n最高温度: {w_max}\n最低温度: {w_min}\n风力: {fengli} {fengxiang}\n{ganmao}'
elif data_json["desc"] == "OK":
w_type = data_json["data"]["forecast"][0]["type"]
w_max = data_json["data"]["forecast"][0]["high"][3:]
w_min = data_json["data"]["forecast"][0]["low"][3:]
fengli = data_json["data"]["forecast"][0]["fengli"][9:-3]
ganmao = data_json["data"]["ganmao"]
fengxiang = data_json["data"]["forecast"][0]["fengxiang"]
repass = f"{city}的天气是 {w_type} 天\n最高温度: {w_max}\n最低温度: {w_min}\n风力: {fengli} {fengxiang}\n{ganmao}"
return repass
else:
return '好像出错了?'
return "好像出错了?"