# -*- coding: utf-8 -*- import irc3 import requests from docopt import Dict as DocOptDict from irc3.plugins.command import command from irc3.utils import IrcString from . import Plugin @irc3.plugin class Coins(Plugin): requires = ['irc3.plugins.command'] API_URL = 'https://api.cryptowat.ch/markets/coinbase/{crypto}{currency}/summary' CURRENCIES = { 'usd': '$', 'eur': '€', 'eth': 'Ξ', 'btc': '฿', } @command def btc(self, mask: IrcString, target: IrcString, args: DocOptDict): """Gets the Bitcoin values from cryptowatch. %%btc [] """ return self.cryptowat_summary('btc', args.get('') or 'usd') @command def eth(self, mask: IrcString, target: IrcString, args: DocOptDict): """Gets the Ethereum values from cryptowatch. %%eth [] """ return self.cryptowat_summary('eth', args.get('') or 'usd') def cryptowat_summary(self, crypto: str, currency: str = 'usd'): # Check if valid currency + crypto2currency if currency not in self.CURRENCIES or crypto == currency: return # Send request to api data = requests.get(self.API_URL.format(crypto=crypto, currency=currency)) if data: result = data.json()['result'] return '\x02[{crypto}]\x02 ' \ 'Current: \x02\x0307{currency}{last:,.2f}\x0F - ' \ 'High: \x02\x0303{currency}{high:,.2f}\x0F - ' \ 'Low: \x02\x0304{currency}{low:,.2f}\x0F - ' \ 'Change: \x02\x0307{change:,.2f}%\x0F - ' \ 'Volume: \x02\x0307{volume}\x0F' \ .format(crypto=crypto.upper(), currency=self.CURRENCIES[currency], last=result['price']['last'], high=result['price']['high'], low=result['price']['low'], change=result['price']['change']['percentage'] * 100, volume=result['volume'])