mirror of
https://github.com/TeamPGM/PagerMaid_Plugins.git
synced 2024-11-24 00:24:11 +00:00
bc: Update plugin bc v1.3 (#21)
This commit is contained in:
parent
7e14c2232e
commit
c3ac15017f
164
bc.py
164
bc.py
@ -7,107 +7,109 @@
|
|||||||
# \_| \___|_| |_|\__\__,_|\___\___|_| |_|\___|
|
# \_| \___|_| |_|\__\__,_|\___\___|_| |_|\___|
|
||||||
#
|
#
|
||||||
|
|
||||||
from asyncio import sleep
|
from datetime import datetime
|
||||||
from sys import executable
|
from sys import executable
|
||||||
import urllib.request
|
import urllib.request
|
||||||
from telethon.tl.custom.message import Message
|
from pyrogram import Client
|
||||||
from pagermaid import version
|
|
||||||
from pagermaid.listener import listener
|
from pagermaid.listener import listener
|
||||||
from pagermaid.utils import execute, alias_command, pip_install
|
from pagermaid.utils import Message, pip_install
|
||||||
|
|
||||||
pip_install("python-binance", alias="binance")
|
pip_install("binance-connector", alias="binance")
|
||||||
pip_install("xmltodict")
|
pip_install("xmltodict")
|
||||||
|
|
||||||
from binance.client import Client
|
from binance.spot import Spot
|
||||||
|
from binance.error import ClientError
|
||||||
import xmltodict
|
import xmltodict
|
||||||
|
|
||||||
|
|
||||||
API = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
|
API = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
|
||||||
CURRENCIES = []
|
|
||||||
DATA = {}
|
|
||||||
BINANCE_API_KEY = '8PDfQ2lSIyHPWdNAHNIaIoNy3MiiMuvgwYADbmtsKo867B0xnIhIGjPULsOtvMRk'
|
|
||||||
BINANCE_API_SECRET = 'tbUiyZ94l0zpYOlKs3eO1dvLNMOSbOb2T1T0eT0I1eogH9Fh8Htvli05eZ1iDvra'
|
|
||||||
|
|
||||||
|
def init() -> list:
|
||||||
def init() -> None:
|
|
||||||
""" INIT """
|
""" INIT """
|
||||||
with urllib.request.urlopen(API) as response:
|
with urllib.request.urlopen(API) as response:
|
||||||
result = response.read()
|
result = response.read()
|
||||||
try:
|
currencies = []
|
||||||
global CURRENCIES, DATA
|
data = {}
|
||||||
rate_data = xmltodict.parse(result)
|
rate_data = xmltodict.parse(result)
|
||||||
rate_data = rate_data['gesmes:Envelope']['Cube']['Cube']['Cube']
|
rate_data = rate_data['gesmes:Envelope']['Cube']['Cube']['Cube']
|
||||||
for i in rate_data:
|
for i in rate_data:
|
||||||
CURRENCIES.append(i['@currency'])
|
currencies.append(i['@currency'])
|
||||||
DATA[i['@currency']] = float(i['@rate'])
|
data[i['@currency']] = float(i['@rate'])
|
||||||
CURRENCIES.sort()
|
currencies.sort()
|
||||||
except Exception as e:
|
return [currencies, data]
|
||||||
raise e
|
|
||||||
|
|
||||||
|
|
||||||
@listener(is_plugin=True, outgoing=True, command=alias_command("bc"),
|
@listener(is_plugin=True, outgoing=True, command=alias_command("bc"),
|
||||||
description="coins",
|
description="coins",
|
||||||
parameters="<num> <coin1> <coin2>")
|
parameters="<num> <coin1> <coin2>")
|
||||||
async def coin(context: Message) -> None:
|
async def coin(context: Message) -> None:
|
||||||
""" coin change """
|
"""coin change"""
|
||||||
init()
|
currencies, data = init()
|
||||||
action = context.arguments.split()
|
binanceclient = Spot()
|
||||||
binanceclient = Client(BINANCE_API_KEY, BINANCE_API_SECRET)
|
nowtimestamp = binanceclient.time()
|
||||||
if len(action) < 3:
|
nowtime = datetime.fromtimestamp(float(nowtimestamp['serverTime'])/1000)
|
||||||
await context.edit('输入错误.\n-bc 数量 币种1 币种2')
|
if len(context.parameter) == 0:
|
||||||
|
btc_usdt_data = binanceclient.klines("BTCUSDT", "1m")[:1][0]
|
||||||
|
eth_usdt_data = binanceclient.klines("ETHUSDT", "1m")[:1][0]
|
||||||
|
await context.edit((
|
||||||
|
f'{nowtime.strftime("%Y-%m-%d %H:%M:%S")} UTC\n'
|
||||||
|
f'**1 BTC** = {btc_usdt_data[1]} USDT '
|
||||||
|
f'\n'
|
||||||
|
f'**1 ETH** = {eth_usdt_data[1]} USDT '))
|
||||||
return
|
return
|
||||||
else:
|
if len(context.parameter) < 3:
|
||||||
prices = binanceclient.get_all_tickers()
|
await context.edit('输入错误.\nbc 数量 币种1 币种2')
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
number = float(context.parameter[0])
|
||||||
|
except ValueError:
|
||||||
|
await context.edit('输入错误.\nbc 数量 币种1 币种2')
|
||||||
|
return
|
||||||
|
_from = context.parameter[1].upper().strip()
|
||||||
|
_to = context.parameter[2].upper().strip()
|
||||||
|
|
||||||
|
# both are real currency
|
||||||
|
if (currencies.count(_from) != 0) and (currencies.count(_to) != 0):
|
||||||
|
await context.edit((
|
||||||
|
f'{context.parameter[0]} {context.parameter[1].upper().strip()} ='
|
||||||
|
f'{number * data[_to] / data[_from]:.2f} '
|
||||||
|
f'{context.parameter[2].upper().strip()}'))
|
||||||
|
return
|
||||||
|
|
||||||
|
# from real currency to crypto
|
||||||
|
if currencies.count(_from) != 0:
|
||||||
|
usd_number = number * data["USD"] / data[_from]
|
||||||
try:
|
try:
|
||||||
number = float(action[0])
|
x_usdt_data = binanceclient.klines(f"{_to}USDT", "1m")[:1][0]
|
||||||
except ValueError:
|
except ClientError:
|
||||||
await context.edit('输入错误.\n-bc 数量 币种1 币种2')
|
await context.edit(f'Cannot find coinpair {_to}USDT')
|
||||||
return
|
return
|
||||||
_from = action[1].upper().strip()
|
await context.edit((
|
||||||
_to = action[2].upper().strip()
|
f'{context.parameter[0]} **{_from}** = '
|
||||||
front_text = ''
|
f'{1 / float(x_usdt_data[1]) * usd_number:.8f} **{_to}**\n'
|
||||||
text = ''
|
f'{context.parameter[0]} **{_from}** = '
|
||||||
rear_text = ''
|
f'{usd_number:.2f} **USD**'))
|
||||||
price = 0.0
|
return
|
||||||
_to_USD_rate = 0.0
|
|
||||||
|
|
||||||
if (CURRENCIES.count(_from) != 0) and (CURRENCIES.count(_to) != 0):
|
# from crypto to real currency
|
||||||
# both are real currency
|
if currencies.count(_to) != 0:
|
||||||
text = f'{action[0]} {action[1].upper().strip()} = {float(action[0])*DATA[_to]/DATA[_from]:.2f} {action[2].upper().strip()}'
|
usd_number = number * data[_to] / data["USD"]
|
||||||
|
try:
|
||||||
|
x_usdt_data = binanceclient.klines(f"{_from}USDT", "1m")[:1][0]
|
||||||
|
except ClientError:
|
||||||
|
await context.edit(f'Cannot find coinpair {_from}USDT')
|
||||||
|
return
|
||||||
|
await context.edit((
|
||||||
|
f'{context.parameter[0]} **{_from}** = '
|
||||||
|
f'{float(x_usdt_data[1]) * usd_number:.2f} **{_to}**\n'
|
||||||
|
f'{context.parameter[0]} **{_from}** = '
|
||||||
|
f'{float(x_usdt_data[1]):.2f} **USD**'))
|
||||||
|
return
|
||||||
|
|
||||||
else:
|
# both crypto
|
||||||
if CURRENCIES.count(_from) != 0:
|
try:
|
||||||
# from virtual currency to real currency
|
from_to_data = binanceclient.klines(f"{_from}{_to}", "1m")[:1][0]
|
||||||
number = number * DATA["USD"] / DATA[_from]
|
except ClientError:
|
||||||
_from = 'USDT'
|
await context.edit(f'Cannot find coinpair {_from}{_to}')
|
||||||
front_text = f'{action[0]} {action[1]} = \n'
|
return
|
||||||
|
await context.edit((
|
||||||
if CURRENCIES.count(_to) != 0:
|
f'{context.parameter[0]} **{_from}** = '
|
||||||
# from real currency to virtual currency
|
f'{float(from_to_data[1]) * number} **{_to}**\n'))
|
||||||
_to_USD_rate = DATA[_to] / DATA["USD"]
|
|
||||||
_to = 'USDT'
|
|
||||||
|
|
||||||
for _a in prices:
|
|
||||||
if _a['symbol'] == str(f'{_from}{_to}'):
|
|
||||||
price = _a['price']
|
|
||||||
if _to == 'USDT':
|
|
||||||
if action[2].upper().strip() == 'USDT':
|
|
||||||
rear_text = f'\n= {number * float(price) * DATA["CNY"]/DATA["USD"]:.2f} CNY'
|
|
||||||
else:
|
|
||||||
rear_text = f'\n= {number * float(price) * _to_USD_rate:.2f} {action[2].upper().strip()}'
|
|
||||||
if float(price) < 1:
|
|
||||||
text = f'{number} {_from} = {number * float(price):.8f} {_to}'
|
|
||||||
else:
|
|
||||||
text = f'{number} {_from} = {number * float(price):.2f} {_to}'
|
|
||||||
break
|
|
||||||
elif _a['symbol'] == str(f'{_to}{_from}'):
|
|
||||||
price = 1 / float(_a['price'])
|
|
||||||
text = f'{number} {_from} = {number * float(price):.8f} {_to}'
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
price = None
|
|
||||||
|
|
||||||
if price is None:
|
|
||||||
text = f'Cannot find coinpair {action[1].upper().strip()}{action[2].upper().strip()} or {action[2].upper().strip()}{action[1].upper().strip()}'
|
|
||||||
|
|
||||||
await context.edit(f'{front_text}{text}{rear_text}')
|
|
||||||
|
@ -432,10 +432,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "bc",
|
"name": "bc",
|
||||||
"version": "1.232",
|
"version": "1.3",
|
||||||
"section": "chat",
|
"section": "chat",
|
||||||
"maintainer": "Pentacene",
|
"maintainer": "Pentacene",
|
||||||
"size": "8.0 kb",
|
"size": "4.14 kb",
|
||||||
"supported": true,
|
"supported": true,
|
||||||
"des-short": "查询含虚拟货币在内的货币价格",
|
"des-short": "查询含虚拟货币在内的货币价格",
|
||||||
"des": "命令:bc 数量 货币1 货币2"
|
"des": "命令:bc 数量 货币1 货币2"
|
||||||
|
Loading…
Reference in New Issue
Block a user