diff --git a/rate.py b/rate.py index 24cfc06..77c5fbd 100644 --- a/rate.py +++ b/rate.py @@ -1,42 +1,52 @@ -""" Pagermaid currency exchange rates plugin. Plugin by @fruitymelon """ +""" Pagermaid currency exchange rates plugin. Plugin by @fruitymelon and @xtaodada """ -import asyncio, json -from json.decoder import JSONDecodeError +import sys import urllib.request from pagermaid.listener import listener -API = "https://api.exchangeratesapi.io/latest" +imported = True +API = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml" currencies = [] -data = {} - -inited = False +rates = {} def init(): with urllib.request.urlopen(API) as response: result = response.read() try: - global data - data = json.loads(result) - data["rates"][data["base"]] = 1.0 - for key in list(enumerate(data["rates"])): - currencies.append(key[1]) + global rate_data, rates + rate_data = xmltodict.parse(result) + rate_data = rate_data['gesmes:Envelope']['Cube']['Cube']['Cube'] + for i in rate_data: + currencies.append(i['@currency']) + rates[i['@currency']] = float(i['@rate']) currencies.sort() - except JSONDecodeError as e: + except Exception as e: raise e - global inited - inited = True -init() +try: + import xmltodict + + init() +except ImportError: + imported = False + + +def logsync(message): + sys.stdout.writelines(f"{message}\n") + + +logsync("rate: loading... If failed, please install xmltodict first.") @listener(is_plugin=True, outgoing=True, command="rate", description="货币汇率插件", parameters=" ") async def rate(context): - while not inited: - await asyncio.sleep(1) + if not imported: + await context.edit("请先安装依赖:`python3 -m pip install xmltodict`\n随后,请重启 pagermaid。") + return if not context.parameter: await context.edit( f"这是货币汇率插件\n\n使用方法: `-rate `\n\n支持货币: \n{', '.join(currencies)}") @@ -57,4 +67,5 @@ async def rate(context): if currencies.count(TO) == 0: await context.edit(f"{TO}不是支持的货币. \n\n支持货币: \n{', '.join(currencies)}") return - await context.edit(f'{FROM} : {TO} = {NB} : {round(data["rates"][TO]/data["rates"][FROM]*NB,2)}') + rate_num = round(rates[TO] / rates[FROM] * NB, 2) + await context.edit(f'{FROM} : {TO} = {NB} : {rate_num}')