2017-03-21 03:59:50 +00:00
#romerito -*- coding: UTF-8 -*-
import sopel . module
import requests
import time
2017-04-26 04:29:09 +00:00
import random
2018-04-21 16:51:59 +00:00
import datetime
2020-03-09 04:47:25 +00:00
import re
import client
2020-09-23 23:58:35 +00:00
import csv
2017-03-21 03:59:50 +00:00
polourl = " https://poloniex.com/public?command=returnTicker "
poloxmrlendurl = " https://poloniex.com/public?command=returnLoanOrders¤cy=XMR&limit=999999 "
2017-05-07 18:00:44 +00:00
polobtclendurl = " https://poloniex.com/public?command=returnLoanOrders¤cy=BTC&limit=999999 "
2017-03-21 03:59:50 +00:00
prevamnt , prevtime = 0 , 0
trexurl = " https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc- "
finexbtc = ' https://api.bitfinex.com/v1/pubticker/XMRBTC '
finexusd = ' https://api.bitfinex.com/v1/pubticker/XMRUSD '
krakbtc = ' https://api.kraken.com/0/public/Ticker?pair=XMRXBT '
krakbtceur = ' https://api.kraken.com/0/public/Ticker?pair=XBTEUR '
krakusd = ' https://api.kraken.com/0/public/Ticker?pair=XMRUSD '
krakeur = ' https://api.kraken.com/0/public/Ticker?pair=XMREUR '
2017-08-09 00:06:59 +00:00
kraktrig = ' https://api.kraken.com/0/public/Ticker?pair= ' #append coin/trigger in function below
2017-04-26 04:29:09 +00:00
krakusdt = ' http://api.kraken.com/0/public/Ticker?pair=USDTUSD '
2017-06-01 01:10:54 +00:00
bitflyerurl = ' https://api.bitflyer.jp/v1/ticker '
2017-09-07 20:40:29 +00:00
thumbxmrurl = ' https://api.bithumb.com/public/ticker/xmr ' # measured natively in KRW
thumbbtcurl = ' https://api.bithumb.com/public/ticker/btc ' # measured natively in KRW
2018-01-24 04:49:36 +00:00
binanceurl = ' https://api.binance.com/api/v1/ticker/24hr '
2018-07-28 19:56:30 +00:00
ogreurl = ' https://tradeogre.com/api/v1/markets '
2017-09-07 20:40:29 +00:00
2018-07-28 14:43:56 +00:00
2018-04-21 16:51:59 +00:00
@sopel.module.commands ( ' ath ' )
def ath ( bot , trigger ) :
2020-03-09 04:47:25 +00:00
r = requests . get ( ' https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=monero&order=market_cap_desc&per_page=100&page=1&sparkline=false ' )
j = r . json ( )
usdath = j [ 0 ] [ ' ath ' ]
usdathdate = j [ 0 ] [ ' ath_date ' ]
r = requests . get ( ' https://api.coingecko.com/api/v3/coins/markets?vs_currency=btc&ids=monero&order=market_cap_desc&per_page=100&page=1&sparkline=false ' )
j = r . json ( )
btcath = j [ 0 ] [ ' ath ' ]
btcathdate = j [ 0 ] [ ' ath_date ' ]
2018-04-21 16:51:59 +00:00
bot . say ( " BTC ath = {} on {} . USD ath = $ {} on {} " . format ( btcath , btcathdate , usdath , usdathdate ) )
2017-07-28 04:01:49 +00:00
2020-03-09 04:47:25 +00:00
2017-03-21 03:59:50 +00:00
@sopel.module.commands ( ' bfx ' , ' bitfinex ' )
def bfx ( bot , trigger ) :
stringtosay = ' '
try :
r = requests . get ( finexbtc )
j = r . json ( )
stringtosay + = " Last XMR/BTC trade at {0:.6f} on {1:.2f} 24 h XMR volume. " . format ( float ( j [ ' last_price ' ] ) , float ( j [ ' volume ' ] ) )
except :
bot . say ( " Error getting XMR/BTC data " )
try :
r = requests . get ( finexusd )
j = r . json ( )
stringtosay + = " Last XMR/USD trade at {0:.2f} on {1:.2f} 24 h XMR volume. " . format ( float ( j [ ' last_price ' ] ) , float ( j [ ' volume ' ] ) )
except :
bot . say ( " Error getting XMR/USD data " )
try :
bot . say ( stringtosay )
except :
bot . say ( " Error getting data " )
2020-03-09 04:47:25 +00:00
@sopel.module.commands ( ' binance ' , ' cz ' )
def binance ( bot , trigger ) :
try :
if not trigger . group ( 2 ) :
coin = ' XMR '
pair = ' BTC '
else :
coin = trigger . group ( 2 ) . split ( ' ' ) [ 0 ] . upper ( )
try :
if len ( trigger . group ( 2 ) . split ( ' ' ) [ 1 ] ) > 1 :
pair = trigger . group ( 2 ) . split ( ' ' ) [ 1 ] . upper ( )
else :
pair = " BTC "
except :
pair = " BTC "
r = requests . get ( binanceurl )
j = r . json ( )
found = False
for i in j :
if i [ " symbol " ] == coin + pair :
last = float ( i [ ' lastPrice ' ] )
change = float ( i [ ' priceChangePercent ' ] )
vol = float ( i [ ' volume ' ] )
bot . say ( " {0} on Binance at {1:.8f} {2} ; {3:.2f} % o ver 24 hours on {4:.3f} {2} volume " . format ( coin , last , pair , change , vol * last ) )
found = True
if found == False :
bot . say ( " Too scammy even for Binance " )
except :
bot . say ( " Error retrieving data from Binance " )
@sopel.module.commands ( ' btckrak ' , ' btckraken ' , ' btceur ' )
def krakeur ( bot , trigger ) :
stringtosay = ' '
try :
r = requests . get ( krakbtceur )
j = r . json ( )
stringtosay + = " Last BTC/EUR trade at € {0:.2f} on {1:.2f} BTC 24 h volume. " . format ( float ( j [ ' result ' ] [ ' XXBTZEUR ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' XXBTZEUR ' ] [ ' v ' ] [ 0 ] ) )
except :
bot . say ( " Error getting BTC/EUR data " )
try :
bot . say ( stringtosay )
except :
bot . say ( " Error getting data " )
@sopel.module.commands ( ' btclending ' )
def btclending ( bot , trigger ) :
try :
r = requests . get ( polobtclendurl )
j = r . json ( )
amnt = 0
amnt10 = 0
rate10 = 0
amnt100 = 0
rate100 = 0
for i in j [ ' offers ' ] :
if amnt < 10 :
amnt10 = amnt
rate10 = float ( i [ ' rate ' ] )
if amnt < 100 :
amnt100 = amnt
rate100 = float ( i [ ' rate ' ] )
amnt + = float ( i [ ' amount ' ] )
bot . say ( " Minimum rate is {0:.3f} % . To borrow {1:,.2f} BTC need up to rate {2:.3f} % . To borrow {3:,.2f} BTC need up to rate {4:.3f} % . Total amount is {5:,.2f} BTC at max rate {6:.3f} % " . format ( float ( j [ ' offers ' ] [ 0 ] [ ' rate ' ] ) * 100 , amnt10 , rate10 * 100 , amnt100 , rate100 * 100 , amnt , float ( j [ ' offers ' ] [ - 1 ] [ ' rate ' ] ) * 100 ) )
except :
bot . say ( " Something bad happened :o " )
@sopel.module.commands ( ' cmc ' , ' coinmarketcap ' )
def cmc ( bot , trigger ) :
bot . say ( " fuck cmc and their scam promoting website " )
2018-11-27 01:16:19 +00:00
@sopel.module.commands ( ' gecko ' , ' cg ' , ' gec ' )
def gecko ( bot , trigger ) :
if not trigger . group ( 2 ) :
coin = " monero "
else :
2021-04-03 14:08:51 +00:00
coin = trigger . group ( 2 ) . lower ( )
2018-11-27 01:16:19 +00:00
try :
2021-04-03 14:08:51 +00:00
r = requests . get ( ' https://api.coingecko.com/api/v3/coins/list ' )
2018-11-27 01:16:19 +00:00
j = r . json ( )
2021-04-03 14:08:51 +00:00
for i in j :
if coin == i [ ' symbol ' ] or coin == i [ ' name ' ] . lower ( ) :
id = i [ ' id ' ]
except :
bot . say ( " Failed to find {} " . format ( coin ) )
try :
if coin == ' wow ' or coin == ' wownero ' : id = ' wownero '
r = requests . get ( ' https://api.coingecko.com/api/v3/coins/ ' + id )
j = r . json ( )
name = j [ ' name ' ]
ticker = j [ ' symbol ' ] . upper ( )
2018-11-27 01:16:19 +00:00
mcaprank = j [ ' market_cap_rank ' ]
2021-04-03 14:08:51 +00:00
mcap = j [ ' market_data ' ] [ ' market_cap ' ] [ ' usd ' ]
2018-11-27 01:16:19 +00:00
geckorank = j [ ' coingecko_rank ' ]
btcprice = j [ ' market_data ' ] [ ' current_price ' ] [ ' btc ' ]
usdprice = j [ ' market_data ' ] [ ' current_price ' ] [ ' usd ' ]
athbtc = j [ ' market_data ' ] [ ' ath ' ] [ ' btc ' ]
athusd = j [ ' market_data ' ] [ ' ath ' ] [ ' usd ' ]
2021-04-03 14:08:51 +00:00
change_1d = j [ ' market_data ' ] [ ' price_change_percentage_24h_in_currency ' ] [ ' usd ' ]
change_1w = j [ ' market_data ' ] [ ' price_change_percentage_7d_in_currency ' ] [ ' usd ' ]
2021-04-12 23:41:46 +00:00
try :
change_1m = j [ ' market_data ' ] [ ' price_change_percentage_30d_in_currency ' ] [ ' usd ' ]
except : change_1m = 0
try :
change_1y = j [ ' market_data ' ] [ ' price_change_percentage_1y_in_currency ' ] [ ' usd ' ]
except : change_1y = 0
2021-04-03 14:08:51 +00:00
bot . say ( " {} ( {} ) is # {:.0f} by mcap ($ {:.2e} ) and # {:.0f} by coingecko rank. Current price is {:.8f} BTC / $ {:.3f} . ATH price is {:.8f} BTC / $ {:.3f} . USD change: 1d {:.1f} % , 1w {:.1f} % , 1m {:.1f} % , 1y {:.1f} % . " . format ( name , ticker , mcaprank , mcap , geckorank , btcprice , usdprice , athbtc , athusd , change_1d , change_1w , change_1m , change_1y ) )
2018-11-27 01:16:19 +00:00
except :
2021-04-03 14:08:51 +00:00
bot . say ( " Failed to retrieve or parse data for {} " . format ( coin ) )
2018-11-27 01:16:19 +00:00
2020-09-23 23:58:35 +00:00
@sopel.module.commands ( ' coin ' , ' coinex ' )
def coinex ( bot , trigger ) :
if not trigger . group ( 2 ) :
bot . say ( " .coin <coin-name> <currency-code> " )
else :
try :
coinname = trigger . group ( 2 ) . split ( " " ) [ 0 ]
currencyname = trigger . group ( 2 ) . split ( " " ) [ 1 ]
r = requests . get (
' https://api.coingecko.com/api/v3/coins/markets?vs_currency= {0} &ids= {1} &sparkline=false ' .
format ( currencyname , coinname ) )
j = r . json ( )
bot . say ( " {0} price {1:,.2f} {2} " . format ( j [ 0 ] [ ' name ' ] ,
float (
j [ 0 ] [ ' current_price ' ] ) ,
currencyname . upper ( ) ) )
except :
bot . say ( " Failed to retrieve price. " )
2020-03-09 04:47:25 +00:00
2017-03-21 03:59:50 +00:00
@sopel.module.commands ( ' krak ' , ' kraken ' )
def krak ( bot , trigger ) :
stringtosay = ' '
2017-08-05 03:01:07 +00:00
if not trigger . group ( 2 ) :
try :
r = requests . get ( krakbtc )
j = r . json ( )
stringtosay + = " Last XMR/BTC trade at {0:.6f} on {1:.2f} 24 h XMR volume. " . format ( float ( j [ ' result ' ] [ ' XXMRXXBT ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' XXMRXXBT ' ] [ ' v ' ] [ 1 ] ) )
except :
bot . say ( " Error getting XMR/BTC data " )
try :
r = requests . get ( krakusd )
j = r . json ( )
stringtosay + = " Last XMR/USD trade at {0:.2f} on {1:.2f} 24 h XMR volume. " . format ( float ( j [ ' result ' ] [ ' XXMRZUSD ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' XXMRZUSD ' ] [ ' v ' ] [ 1 ] ) )
except :
bot . say ( " Error getting XMR/USD data " )
try :
r = requests . get ( ' https://api.kraken.com/0/public/Ticker?pair=XMREUR ' ) #shouldn't this be krakeur?
j = r . json ( )
stringtosay + = " Last XMR/EUR trade at {0:.2f} on {1:.2f} 24 h XMR volume. " . format ( float ( j [ ' result ' ] [ ' XXMRZEUR ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' XXMRZEUR ' ] [ ' v ' ] [ 1 ] ) )
except :
bot . say ( " Error getting XMR/EUR data " )
try :
bot . say ( stringtosay )
except :
2018-07-28 14:43:56 +00:00
bot . say ( " Error getting data " )
2017-08-05 03:01:07 +00:00
else :
coin = trigger . group ( 2 ) . upper ( )
try :
2017-08-09 00:06:59 +00:00
r = requests . get ( kraktrig + coin + ' XBT ' )
2017-08-05 03:01:07 +00:00
j = r . json ( )
2017-08-09 00:09:21 +00:00
stringtosay + = " {0} at {1:.8f} on {2:.2f} 24 h {0} volume. " . format ( coin , float ( j [ ' result ' ] [ ' X ' + str ( coin ) + ' XXBT ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' X ' + str ( coin ) + ' XXBT ' ] [ ' v ' ] [ 1 ] ) )
2017-08-05 03:01:07 +00:00
except :
bot . say ( " Error connecting to Kraken " )
try :
bot . say ( stringtosay )
except :
bot . say ( " Error getting data " )
2017-03-21 03:59:50 +00:00
2017-04-26 04:29:09 +00:00
2020-03-09 04:47:25 +00:00
@sopel.module.commands ( ' lending ' )
def lending ( bot , trigger ) :
2017-03-21 03:59:50 +00:00
try :
2020-03-09 04:47:25 +00:00
r = requests . get ( poloxmrlendurl )
j = r . json ( )
amnt = 0
currenttime = time . time ( )
for i in j [ ' offers ' ] :
amnt + = float ( i [ ' amount ' ] )
bot . say ( " Total amount of XMR available {0:,.2f} . Changed by {1:.2f} in the last {2:.2f} hours " . format ( amnt , amnt - prevamnt , ( currenttime - prevtime ) / 3600 ) )
global prevamnt
prevamnt = amnt
global prevtime
prevtime = currenttime
2017-03-21 03:59:50 +00:00
except :
2020-03-09 04:47:25 +00:00
bot . say ( " Something bad happened :o " )
2017-03-21 03:59:50 +00:00
@sopel.module.commands ( ' chart ' )
def chart ( bot , trigger ) :
bot . say ( ' https://cryptowat.ch/poloniex/xmrbtc ' )
2020-03-09 04:47:25 +00:00
@sopel.module.commands ( ' metal ' )
def metal ( bot , trigger ) :
try :
if not trigger . group ( 2 ) :
target = " Gold "
elif trigger . group ( 2 ) . lower ( ) in { ' xau ' , ' gold ' } : target = " Gold "
elif trigger . group ( 2 ) . lower ( ) in { ' xag ' , ' silver ' } : target = " Silver "
elif trigger . group ( 2 ) . lower ( ) in { ' xpd ' , ' palladium ' } : target = " Palladium "
elif trigger . group ( 2 ) . lower ( ) in { ' xpt ' , ' platinum ' } : target = " Platinum "
pattern = re . compile ( ' <div class= \" metal \" > {} </div> \\ r \\ n \ s*<div class= \" price \" ><span class= \" current \" >( \ $[ \ d,.]*)</span><span class= \" ([ \ w \ s]*) \" > \ (?( \ $[ \ d,.]*) ' . format ( target ) )
r = requests . get ( ' https://www.apmex.com/ ' )
result = re . findall ( pattern , r . text )
if ' green ' in result [ 0 ] [ 1 ] : sign = ' + '
else : sign = ' - '
bot . say ( " Last price for {} is {} with {} {} change " . format ( target , result [ 0 ] [ 0 ] , sign , result [ 0 ] [ 2 ] ) )
except :
bot . say ( " Regex parsing of apmex failed " )
2019-08-09 20:59:40 +00:00
@sopel.module.commands ( ' polo ' , ' poloniex ' , ' marco ' , ' plol ' )
2017-03-21 03:59:50 +00:00
@sopel.module.interval ( 3600 )
def polo ( bot , trigger ) :
2018-07-28 14:43:56 +00:00
if not trigger . group ( 2 ) :
2017-03-21 03:59:50 +00:00
try :
r = requests . get ( polourl )
j = r . json ( )
xmr = j [ " BTC_XMR " ]
last = float ( xmr [ ' last ' ] )
change = float ( xmr [ ' percentChange ' ] )
vol = float ( xmr [ ' baseVolume ' ] )
2018-07-28 14:43:56 +00:00
if change > = 0 :
2017-03-21 03:59:50 +00:00
sign = ' + '
else :
sign = ' '
face = ' '
if change > 0.10 :
face = u ' \u263d ' . encode ( ' utf8 ' )
if 0.10 > = change > 0.05 :
face = u ' \u2661 ' . encode ( ' utf8 ' )
if 0.05 > = change > 0.02 :
face = u ' \u263a ' . encode ( ' utf8 ' )
if 0.02 > = change > - 0.02 :
face = u ' \u2694 ' . encode ( ' utf8 ' )
if - 0.02 > = change > - 0.05 :
face = u ' \u2639 ' . encode ( ' utf8 ' )
if - 0.05 > = change > - 0.1 :
face = u ' \u2620 ' . encode ( ' utf8 ' )
2018-07-28 14:43:56 +00:00
if change < - 0.1 :
2017-03-21 03:59:50 +00:00
face = u ' \u262d ' . encode ( ' utf8 ' )
bot . say ( " Poloniex at {0:.8f} BTC; {1} {2:.2f} % o ver 24 hours on {3:.3f} BTC volume {4} " . format ( last , sign , change * 100 , vol , face ) )
except :
bot . say ( " Error retrieving data from Poloniex " )
else :
coin = trigger . group ( 2 ) . upper ( )
try :
r = requests . get ( polourl )
j = r . json ( )
except :
bot . say ( " Error connecting to Poloniex " )
if len ( coin ) > 5 or len ( coin ) < 2 :
bot . say ( " Coin ticker is too long or short " )
# elif coin == "PASC":
# bot.say("COBOL only in #monero-markets")
# elif coin == "NAUT":
# bot.say("That ship has sailed...")
2017-04-26 04:29:09 +00:00
elif coin == " PIVX " :
bot . say ( " Masternodes + PoS...what could possibly go wrong? " )
2017-03-21 03:59:50 +00:00
else :
label = " BTC_ " + coin
try :
ticker = j [ label ]
last = float ( ticker [ ' last ' ] )
change = float ( ticker [ ' percentChange ' ] )
vol = float ( ticker [ ' baseVolume ' ] )
2018-07-28 14:43:56 +00:00
if change > = 0 :
2017-03-21 03:59:50 +00:00
sign = ' + '
else :
sign = ' '
bot . say ( " {0} at {1:.8f} BTC; {2} {3:.2f} % o ver 24 hours on {4:.3f} BTC volume " . format ( coin , last , sign , change * 100 , vol ) )
except :
bot . say ( " ERROR! " )
2018-07-28 14:43:56 +00:00
2020-03-09 04:47:25 +00:00
@sopel.module.commands ( ' paprika ' , ' pap ' )
def paprika ( bot , trigger ) :
if not trigger . group ( 2 ) :
target = ' xmr '
else : target = trigger . group ( 2 ) . lower ( )
2017-06-01 01:10:54 +00:00
try :
2020-03-09 04:47:25 +00:00
r = requests . get ( ' https://api.coinpaprika.com/v1/coins ' )
j = r . json ( )
if target . isdigit ( ) :
for i in j :
if int ( target ) == int ( i [ ' rank ' ] ) :
id = i [ ' id ' ]
else :
for i in j :
if target == i [ ' name ' ] . lower ( ) or target == i [ ' symbol ' ] . lower ( ) :
id = i [ ' id ' ]
r = requests . get ( ' https://api.coinpaprika.com/v1/tickers/ {} ' . format ( id ) )
j = r . json ( )
2020-05-22 19:42:41 +00:00
bot . say ( " {} ( {} ) is # {} by marketcap ($ {:.2e} ), trading at $ {:.4f} with a 24h vol of $ {:.2e} . It ' s changed {} % o ver 24h, {} % o ver 7d, {} % o ver 30d, and {} % o ver 1y with an ath of $ {} on {} . " . format ( j [ ' name ' ] , j [ ' symbol ' ] , j [ ' rank ' ] , float ( j [ ' quotes ' ] [ ' USD ' ] [ ' market_cap ' ] ) , float ( j [ ' quotes ' ] [ ' USD ' ] [ ' price ' ] ) , float ( j [ ' quotes ' ] [ ' USD ' ] [ ' volume_24h ' ] ) , j [ ' quotes ' ] [ ' USD ' ] [ ' percent_change_24h ' ] , j [ ' quotes ' ] [ ' USD ' ] [ ' percent_change_7d ' ] , j [ ' quotes ' ] [ ' USD ' ] [ ' percent_change_30d ' ] , j [ ' quotes ' ] [ ' USD ' ] [ ' percent_change_1y ' ] , j [ ' quotes ' ] [ ' USD ' ] [ ' ath_price ' ] , j [ ' quotes ' ] [ ' USD ' ] [ ' ath_date ' ] ) )
2017-06-01 01:10:54 +00:00
except :
2020-03-09 04:47:25 +00:00
bot . say ( ' No paprika only salt ' )
2017-03-21 03:59:50 +00:00
2020-03-09 04:47:25 +00:00
@sopel.module.commands ( ' price ' )
def price ( bot , trigger ) :
2017-03-21 03:59:50 +00:00
if not trigger . group ( 2 ) :
2020-03-09 04:47:25 +00:00
bot . say ( " 1 XMR = $12,345 USD (Offer valid in participating locations) " )
2018-07-28 14:43:56 +00:00
else :
2020-03-09 04:47:25 +00:00
try :
currency = trigger . group ( 2 )
r = requests . get ( ' https://api.coingecko.com/api/v3/coins/markets?vs_currency= {} &ids=monero&sparkline=false ' . format ( currency ) )
j = r . json ( )
bot . say ( " Monero price {0:,.2f} {1} " . format ( float ( j [ 0 ] [ ' current_price ' ] ) , currency . upper ( ) ) )
except :
bot . say ( " Failed to retrieve price. " )
@sopel.module.commands ( ' stock ' )
def stock ( bot , trigger ) :
ak = client . stocks_key
if trigger . group ( 2 ) :
ticker = trigger . group ( 2 ) . upper ( )
else : ticker = ' WOW '
2017-03-21 03:59:50 +00:00
try :
2020-03-09 04:47:25 +00:00
r = requests . get ( ' https://finnhub.io/api/v1/quote?symbol= {} &token= {} ' . format ( ticker , ak ) )
2017-03-21 03:59:50 +00:00
j = r . json ( )
2020-03-09 04:47:25 +00:00
date = j [ ' t ' ]
high = j [ ' h ' ]
low = j [ ' l ' ]
last = j [ ' c ' ]
pc = j [ ' pc ' ]
2020-03-09 17:57:53 +00:00
bot . say ( " On {} {} had a high of {:.2f} , a low of {:.2f} , and last price of {:.2f} w/ {:.2f} % c hange " . format ( datetime . datetime . fromtimestamp ( date ) , ticker , high , low , last , float ( ( ( last - pc ) / pc ) ) * 100 ) )
2017-03-21 03:59:50 +00:00
except :
2020-03-09 04:47:25 +00:00
bot . say ( " Can ' t find {} " . format ( ticker ) )
2017-03-21 03:59:50 +00:00
2018-07-28 19:56:30 +00:00
@sopel.module.commands ( ' tradeogre ' , ' ogre ' )
def ogre ( bot , trigger ) :
if not trigger . group ( 2 ) :
2018-07-28 20:14:37 +00:00
pair = ' BTC-XMR '
2020-05-22 19:42:41 +00:00
elif " hidden " in trigger . group ( 2 ) or " gem " in trigger . group ( 2 ) :
pair = ' BTC-WOW '
2018-07-28 19:56:30 +00:00
else :
2018-07-28 20:14:37 +00:00
pair = ' BTC- ' + trigger . group ( 2 ) . upper ( )
2018-07-28 19:56:30 +00:00
try :
r = requests . get ( ogreurl )
j = r . json ( )
for i in j :
2018-07-28 20:14:37 +00:00
if pair == i . keys ( ) [ 0 ] :
2018-07-28 20:08:20 +00:00
last = float ( i [ pair ] [ ' price ' ] )
vol = float ( i [ pair ] [ ' volume ' ] )
2018-07-28 20:14:37 +00:00
bot . say ( " {0} on Tradeogre at {1:.8f} BTC on {2:.3f} BTC volume " . format ( pair , last , vol ) )
2018-07-28 19:56:30 +00:00
except :
bot . say ( " Error retrieving data from Ogre " )
2017-03-21 03:59:50 +00:00
2020-03-09 04:47:25 +00:00
@sopel.module.commands ( ' trex ' , ' bittrex ' )
def trex ( bot , trigger ) :
2021-01-21 17:21:42 +00:00
geturl = " "
2017-03-21 03:59:50 +00:00
if not trigger . group ( 2 ) :
2021-01-21 17:21:42 +00:00
bot . say ( " spineless... " )
2021-01-24 13:44:00 +00:00
return
2017-03-21 03:59:50 +00:00
else :
2021-01-21 17:21:42 +00:00
if trigger . group ( 2 ) == " xmr " :
bot . say ( " spineless " )
2021-01-24 13:44:00 +00:00
return
2021-01-21 17:21:42 +00:00
else :
geturl = trexurl + trigger . group ( 2 )
2018-07-28 14:43:56 +00:00
try :
2020-03-09 04:47:25 +00:00
r = requests . get ( geturl )
j = r . json ( )
xmr = j [ ' result ' ] [ 0 ]
last = float ( xmr [ ' Last ' ] )
change = ( ( last / float ( xmr [ ' PrevDay ' ] ) ) - 1 )
vol = float ( xmr [ ' BaseVolume ' ] )
bot . say ( " Bittrex at {0:.8f} BTC; {1:.2f} % o ver 24 hours on {2:.3f} BTC volume " . format ( last , change * 100 , vol ) )
2018-04-21 16:51:59 +00:00
except :
2020-03-09 04:47:25 +00:00
bot . say ( " Error retrieving data from Bittrex " )
2017-03-21 03:59:50 +00:00
2018-01-02 03:59:15 +00:00
@sopel.module.commands ( ' top ' )
2018-01-02 05:07:47 +00:00
def top ( bot , trigger ) :
2018-01-27 15:22:42 +00:00
topXstring = " "
try :
2018-01-03 15:58:02 +00:00
try :
2021-01-06 23:25:44 +00:00
r = requests . get ( ' https://api.coingecko.com/api/v3/global ' )
j = r . json ( )
usd_total_mkt_cap = float ( j [ ' data ' ] [ ' total_market_cap ' ] [ ' usd ' ] )
2021-01-07 02:44:53 +00:00
rounded_total_mcap = trim_mcap ( usd_total_mkt_cap )
2021-01-06 23:25:44 +00:00
topXstring + = " Total market cap $ " + rounded_total_mcap + " | "
2018-01-27 15:22:42 +00:00
except :
2021-01-07 02:44:53 +00:00
bot . say ( " Can ' t connect to coingecko API " )
2018-01-27 15:22:42 +00:00
if not trigger . group ( 2 ) :
2021-01-29 15:34:28 +00:00
try :
r = requests . get ( ' https://api.coingecko.com/api/v3/coins/ ' + ' monero ' )
j = r . json ( )
mcaprank = j [ ' market_cap_rank ' ]
if mcaprank > 20 :
limit = mcaprank
else :
limit = 20
except :
limit = 20
2018-01-27 15:22:42 +00:00
else :
2018-01-03 15:58:02 +00:00
limit = int ( trigger . group ( 2 ) )
2021-01-29 15:34:28 +00:00
if limit > 30 :
bot . say ( " Too high! Max is 30! " )
limit = 30
2018-01-03 15:58:02 +00:00
elif limit < 1 :
bot . say ( " Dude... " )
2021-01-07 02:48:36 +00:00
return
2020-03-09 04:47:25 +00:00
r = requests . get ( ' https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page= {} &page=1&sparkline=false ' . format ( limit ) )
2018-01-27 15:22:42 +00:00
j = r . json ( )
for i in j :
2018-07-28 14:43:56 +00:00
symbol = i [ ' symbol ' ]
2018-01-27 15:22:42 +00:00
name = i [ ' name ' ]
2020-03-09 04:47:25 +00:00
rank = i [ ' market_cap_rank ' ]
price_usd = float ( i [ ' current_price ' ] )
market_cap_usd = float ( i [ ' market_cap ' ] )
2021-01-07 02:44:53 +00:00
rounded_mcap = trim_mcap ( market_cap_usd )
2018-01-27 15:22:42 +00:00
topXstring + = " {0} . {1} $ {2} | " . format ( rank , symbol , rounded_mcap ) #TODO: add price_usd, rounded
2021-04-03 01:39:22 +00:00
xmr_str = topXstring [ - 32 : ] # monero is at the end, and might get truncated
2021-04-04 15:19:13 +00:00
final = ( topXstring [ : 350 ] + " { ...} " + xmr_str ) if len ( topXstring ) > 350 else topXstring
2021-04-03 01:35:52 +00:00
bot . say ( final [ : - 2 ] )
2018-01-27 15:22:42 +00:00
except :
bot . say ( " The use is ' top ' and then a digit 1 - 20 " )
2018-01-02 03:59:15 +00:00
2021-01-07 02:44:53 +00:00
def trim_mcap ( val ) :
mcap = 0
magnitude_sym = " M "
if val > = 1e12 : # >= 1T
magnitude_sym = " T "
if val > = 1e13 :
mcap = round ( val / float ( 1e12 ) , 1 ) # >= 10T show one decimal
else :
mcap = round ( val / float ( 1e12 ) , 2 ) # 1T <= x < 10T show two decimals
elif val > = 1e9 : # >= 1B
magnitude_sym = " B "
if val > = 1e11 :
mcap = int ( round ( val / float ( 1e9 ) , 0 ) ) # >= 100B show no decimals
else :
mcap = round ( val / float ( 1e9 ) , 1 ) # 1B <= x < 100B show one decimal
else : # < 1B
# mcap = "tiny"
mcap = int ( round ( val / float ( 1e6 ) , 0 ) ) # < 1B show no decimals
rounded_mcap = str ( mcap ) + magnitude_sym
return rounded_mcap
2017-03-21 03:59:50 +00:00
@sopel.module.commands ( ' tall ' )
def tall ( bot , trigger ) :
stringtosend = ' '
stampurl = ' https://www.bitstamp.net/api/ticker/ '
finexurl = ' https://api.bitfinex.com/v1/pubticker/BTCUSD '
btccurl = ' https://data.btcchina.com/data/ticker?market=btccny '
gemiurl = ' https://api.gemini.com/v1/pubticker/btcusd '
2017-06-01 01:10:54 +00:00
gdaxurl = ' https://api.gdax.com/products/BTC-USD/ticker '
2017-03-21 03:59:50 +00:00
# Bitstamp
2018-07-28 14:43:56 +00:00
try :
2017-03-21 03:59:50 +00:00
stampresult = requests . get ( stampurl )
stampjson = stampresult . json ( )
except :
stampjson = False
if stampjson :
2018-07-28 14:43:56 +00:00
stringtosend + = " Bitstamp last: $ {0:,.2f} , vol: {1:,.1f} | " . format ( float ( stampjson [ ' last ' ] ) , float ( stampjson [ ' volume ' ] ) )
2017-03-21 03:59:50 +00:00
# Gemini
2018-07-28 14:43:56 +00:00
try :
2017-03-21 03:59:50 +00:00
gemiresult = requests . get ( gemiurl )
gemijson = gemiresult . json ( )
except :
gemijson = False
if gemijson :
try :
2018-07-28 14:43:56 +00:00
stringtosend + = " Gemini last: $ {0:,.2f} , vol: {1:,.1f} | " . format ( float ( gemijson [ ' last ' ] ) , float ( gemijson [ ' volume ' ] [ ' BTC ' ] ) )
2017-03-21 03:59:50 +00:00
except :
pass
# Gdax
2018-07-28 14:43:56 +00:00
try :
2017-03-21 03:59:50 +00:00
gdaxresult = requests . get ( gdaxurl )
gdaxjson = gdaxresult . json ( )
2018-01-02 05:18:11 +00:00
gdaxprice = float ( gdaxjson [ ' price ' ] )
gdaxvolume = float ( gdaxjson [ ' volume ' ] )
2017-03-21 03:59:50 +00:00
except :
gdaxjson = False
if gdaxjson :
2018-10-18 23:49:23 +00:00
stringtosend + = " CBP last: $ {0:,.2f} , vol: {1:,.1f} | " . format ( gdaxprice , gdaxvolume )
# Binance
try :
binanceresult = requests . get ( binanceurl )
binancejson = binanceresult . json ( )
for i in binancejson :
if i [ " symbol " ] == " BTCUSDT " :
binanceprice = float ( i [ ' lastPrice ' ] )
binancevolume = float ( i [ ' volume ' ] )
except :
binancejson = False
if binancejson :
stringtosend + = " Binance last: $ {0:,.2f} , vol: {1:,.1f} | " . format ( binanceprice , binancevolume )
2017-03-21 03:59:50 +00:00
# Bitfinex
2018-07-28 14:43:56 +00:00
try :
2017-03-21 03:59:50 +00:00
finexresult = requests . get ( finexurl )
finexjson = finexresult . json ( )
except :
finexjson = False
2018-07-28 14:00:43 +00:00
try :
if finexjson :
2018-07-28 14:43:56 +00:00
stringtosend + = " Bitfinex last: $ {0:,.2f} , vol: {1:,.1f} | " . format ( float ( finexjson [ ' last_price ' ] ) , float ( finexjson [ ' volume ' ] ) )
2018-07-28 14:00:43 +00:00
except :
stringtosend + = " Finex sucks | "
2020-05-22 19:42:41 +00:00
# Krak euro price
2018-07-28 14:43:56 +00:00
try :
2020-05-22 19:42:41 +00:00
r = requests . get ( krakbtceur )
j = r . json ( )
stringtosend + = " Kraken last: € {0:,.2f} , vol: {1:,.1f} | " . format ( float ( j [ ' result ' ] [ ' XXBTZEUR ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' XXBTZEUR ' ] [ ' v ' ] [ 0 ] ) )
2017-06-01 01:10:54 +00:00
except :
2020-05-22 19:42:41 +00:00
bot . say ( " Error getting BTC/EUR data " )
2017-03-21 03:59:50 +00:00
# Send the tickers to IRC
2018-01-24 04:49:36 +00:00
bot . say ( stringtosend [ : - 2 ] )
2018-07-28 14:43:56 +00:00
2020-09-23 23:58:35 +00:00
addys = [ ]
@sopel.module.commands ( ' uni ' )
def uni ( bot , trigger ) :
addy = trigger . group ( 2 )
if len ( addy ) == 42 and addy [ 0 : 2 ] == " 0x " :
try :
r = requests . get ( " https://api.ethplorer.io/getTokenInfo/ {} ?apiKey=freekey " . format ( addy ) )
j = r . json ( )
name = j [ " name " ]
symbol = j [ " symbol " ]
holders = j [ " holdersCount " ]
price = j [ " price " ] [ " rate " ]
mcap = j [ " price " ] [ " marketCapUsd " ]
vol = j [ " price " ] [ " volume24h " ]
bot . say ( " {} ( {} ) last price $ {:.2f} on {:.2e} vol. Marketcap is $ {:.2e} with {:.0f} addresses holding. " . format ( name , symbol , price , vol , mcap , holders ) )
existflag = False
for i in addys :
if i [ 0 ] == addy :
existflag == True
if not existflag :
addys . append ( [ addy , name , symbol ] )
except :
bot . say ( " Can ' t find this piece of trash " )
return
else :
existflag = False
for i in addys :
if addy == i [ 1 ] or addy == i [ 2 ] :
addy = i [ 0 ]
existflag = True
if not existflag :
bot . say ( " Can ' t find {} " . format ( addy ) )
return
try :
r = requests . get ( " https://api.ethplorer.io/getTokenInfo/ {} ?apiKey=freekey " . format ( addy ) )
j = r . json ( )
name = j [ " name " ]
symbol = j [ " symbol " ]
holders = j [ " holdersCount " ]
price = j [ " price " ] [ " rate " ]
mcap = j [ " price " ] [ " marketCapUsd " ]
vol = j [ " price " ] [ " volume24h " ]
bot . say ( " {} ( {} ) last price $ {:.2f} on {:.2e} vol. Marketcap is $ {:.2e} with {:.0f} addresses holding. " . format ( name , symbol , price , vol , mcap , holders ) )
existflag = False
for i in addys :
if i [ 0 ] == addy :
existflag == True
if not existflag :
addys . append ( [ addy , name , symbol ] )
except :
bot . say ( " Can ' t find this piece of trash " )
return
with open ( ' addys.csv ' , ' w ' ) as f :
writer = csv . writer ( f )
writer . writerows ( addys )
2017-09-06 00:47:31 +00:00
2020-03-09 04:47:25 +00:00
@sopel.module.commands ( ' usd ' )
def usd ( bot , trigger ) :
try :
r = requests . get ( krakusd )
j = r . json ( )
bot . say ( " Monero price in USD = $ {0:,.2f} " . format ( float ( j [ ' result ' ] [ ' XXMRZUSD ' ] [ ' c ' ] [ 0 ] ) ) )
except :
bot . say ( " Failed to retrieve price. " )
@sopel.module.commands ( ' usdt ' )
def usdt ( bot , trigger ) :
try :
r = requests . get ( krakusdt )
j = r . json ( )
stringtosay = " Last USDT/USD trade at $ {0:.4f} on {1:.2f} USD 24 h volume. Highest bid at $ {2:.4f} " . format ( float ( j [ ' result ' ] [ ' USDTZUSD ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' USDTZUSD ' ] [ ' v ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' USDTZUSD ' ] [ ' b ' ] [ 0 ] ) )
bot . say ( stringtosay )
except :
bot . say ( " Error getting USDT/USD data " )
2018-01-02 05:18:11 +00:00
@sopel.module.commands ( ' xmrtall ' , ' xmr ' )
2017-09-06 00:47:31 +00:00
def xmrtall ( bot , trigger ) :
stringtosend = ' '
2017-09-07 20:40:29 +00:00
2017-09-06 00:47:31 +00:00
# Polo
try :
r = requests . get ( polourl )
j = r . json ( )
xmr = j [ " BTC_XMR " ]
last = float ( xmr [ ' last ' ] )
2018-07-28 14:43:56 +00:00
# change=float(xmr['percentChange'])
vol = float ( xmr [ ' baseVolume ' ] )
2017-09-06 03:40:37 +00:00
stringtosend + = " Poloniex last: {0:.6f} BTC on {1:.2f} BTC volume | " . format ( last , vol )
2017-09-06 00:47:31 +00:00
except :
2018-07-28 14:43:56 +00:00
bot . say ( " Something borked ¯ \ (º_o)/¯ " )
2017-09-06 00:47:31 +00:00
# bfx
try :
r = requests . get ( finexbtc )
j = r . json ( )
2017-09-06 03:40:37 +00:00
stringtosend + = " Bitfinex last: {0:.6f} on {1:.2f} XMR volume | " . format ( float ( j [ ' last_price ' ] ) , float ( j [ ' volume ' ] ) )
2017-09-06 00:47:31 +00:00
except :
bot . say ( " Something borked ʕノ•ᴥ•ʔノ ︵ ┻━┻ " )
# Kraken
try :
r = requests . get ( krakbtc )
j = r . json ( )
2017-09-06 03:40:37 +00:00
stringtosend + = " Kraken last: {0:.6f} on {1:.2f} XMR volume | " . format ( float ( j [ ' result ' ] [ ' XXMRXXBT ' ] [ ' c ' ] [ 0 ] ) , float ( j [ ' result ' ] [ ' XXMRXXBT ' ] [ ' v ' ] [ 1 ] ) )
2017-09-06 00:47:31 +00:00
except :
bot . say ( " Something borked ¤ \ ( `⌂´ )/¤ " )
2018-07-28 14:43:56 +00:00
2018-01-27 15:22:42 +00:00
# Binance
try :
2018-01-27 06:17:14 +00:00
r = requests . get ( binanceurl )
j = r . json ( )
found = False
for i in j :
2018-01-27 15:22:42 +00:00
if i [ " symbol " ] == " XMRBTC " :
2018-01-27 06:17:14 +00:00
last = float ( i [ ' lastPrice ' ] )
vol = float ( i [ ' volume ' ] )
2018-02-15 17:30:38 +00:00
stringtosend + = ( " Binance last: {0:.6f} on {1:.2f} BTC volume | " . format ( last , vol * last ) )
2018-01-27 06:17:14 +00:00
found = True
except :
bot . say ( " Borka borka ┌∩┐(◣_◢)┌∩┐ " )
2018-07-28 14:43:56 +00:00
2017-09-06 00:47:31 +00:00
# Trex
2021-01-21 17:21:42 +00:00
# geturl = trexurl+'xmr'
# try:
# r = requests.get(geturl)
# j = r.json()
# xmr=j['result'][0]
# last=float(xmr['Last'])
2017-09-06 00:47:31 +00:00
# change=((last/float(xmr['PrevDay']))-1)
2021-01-21 17:21:42 +00:00
# vol=float(xmr['BaseVolume'])
# stringtosend += "Bittrex last: {0:.6f} BTC on {1:.2f} BTC volume | ".format(last, vol)
# except:
# bot.say("Something borked -_-")
2018-07-28 14:43:56 +00:00
2017-09-06 00:47:31 +00:00
#Finally... print to IRC
2018-04-21 16:51:59 +00:00
bot . say ( stringtosend [ : - 2 ] )
2017-03-21 03:59:50 +00:00