]> jfr.im git - erebus.git/blob - modules/coins.py
added softdeps to modinfo - bumped APIVERSION
[erebus.git] / modules / coins.py
1 # Erebus IRC bot - Author: Erebus Team
2 # simple coin module
3 # This file is released into the public domain; see http://unlicense.org/
4
5 # module info
6 modinfo = {
7 'author': 'Erebus Team',
8 'license': 'public domain',
9 'compatible': [1,2],
10 'depends': [],
11 'softdeps': [],
12 }
13
14 # preamble
15 import modlib
16 lib = modlib.modlib(__name__)
17 modstart = lib.modstart
18 modstop = lib.modstop
19
20 # module code
21 import re
22 import json
23 import requests
24
25 coin_regex = (
26 re.compile(r'([0-9.,\s]+)\s(btc|bitcoin|doge|dogecoin|ltc|litecoin)'),
27 )
28
29 cur_regex = (
30 re.compile(r'([0-9.,\s]+)\s([a-zA-Z]{3})\sin\s([a-zA-Z]{3})'),
31 )
32
33 url = 'http://www.cryptocoincharts.info/v2/api/tradingPairs'
34
35 def get_coin_price(pairs):
36 response = requests.post(url, data = {'pairs': pairs})
37 return json.loads(response.text)
38
39 @lib.hook()
40 def btc(bot, user, chan, realtarget, *args):
41 if len(args) > 0:
42 try:
43 response = get_coin_price('btc_eur')
44 price = str(float(response[0]['price']) * float(args[0]))
45 bot.msg(chan, "%s BTC = %s EUR" % (args[0], price))
46 except:
47 bot.msg(chan, "Invalid amount.")
48 else:
49 response = get_coin_price('btc_eur')
50 price = str(float(response[0]['price']))
51 bot.msg(chan, "1 BTC = %s EUR" % price)
52
53 @lib.hook()
54 def doge(bot, user, chan, realtarget, *args):
55 if len(args) > 0:
56 try:
57 doge_btc = get_coin_price('doge_btc')
58 btc_eur = get_coin_price('btc_eur')
59 price = str(float(doge_btc[0]['price']) * float(btc_eur[0]['price']) * float(args[0]))
60 bot.msg(chan, "%s DOGE = %s EUR" % (args[0], price))
61 except:
62 bot.msg(chan, "Invalid amount.")
63 else:
64 doge_btc = get_coin_price('doge_btc')
65 btc_eur = get_coin_price('btc_eur')
66 price = str(float(doge_btc[0]['price']) * float(btc_eur[0]['price']))
67 bot.msg(chan, "1 DOGE = %s EUR" % price)
68
69 @lib.hook()
70 def ltc(bot, user, chan, realtarget, *args):
71 if len(args) > 0:
72 try:
73 ltc_btc = get_coin_price('ltc_btc')
74 btc_eur = get_coin_price('btc_eur')
75 price = str(float(ltc_btc[0]['price']) * float(btc_eur[0]['price']) * float(args[0]))
76 bot.msg(chan, "%s LTC = %s EUR" % (args[0], price))
77 except:
78 bot.msg(chan, "Invalid amount.")
79 else:
80 ltc_btc = get_coin_price('ltc_btc')
81 btc_eur = get_coin_price('btc_eur')
82 price = str(float(ltc_btc[0]['price']) * float(btc_eur[0]['price']))
83 bot.msg(chan, "1 LTC = %s EUR" % price)
84
85 @lib.hooknum("PRIVMSG")
86 def privmsg_hook(bot, line):
87
88 try:
89 linetx = line.split(None, 3)[3][1:]
90 except IndexError:
91 linetx = ''
92
93 chan = line.split()[2]
94
95 if 'in' in line:
96 for r in cur_regex:
97 for a, f, t in r.findall(linetx):
98
99 # https://www.google.com/finance/converter?a=1.2&from=USD&to=EUR
100
101 a = a.replace(",", ".")
102 a = a.replace(" ", "")
103
104 if 'btc' in line or 'bitcoin' in line or 'doge' in line or 'dogecoin' in line:
105 for r in coin_regex:
106 for amount, coin in r.findall(linetx):
107 amount = amount.replace(",", ".")
108 amount = amount.replace(" ", "")
109 if 'btc' in coin or 'bitcoin' in coin:
110 try:
111 response = get_coin_price('btc_eur')
112 price = str(float(response[0]['price']) * float(amount))
113 bot.msg(chan, "%s BTC = %s EUR" % (amount, price))
114 except:
115 pass
116
117 if 'ltc' in coin or 'litecoin' in coin:
118 pass # Add LTC
119
120 if 'doge' in coin or 'dogecoin' in coin:
121 try:
122 doge_btc = get_coin_price('doge_btc')
123 btc_eur = get_coin_price('btc_eur')
124 price = str(float(doge_btc[0]['price']) * float(btc_eur[0]['price']) * float(amount))
125 bot.msg(chan, "%s DOGE = %s EUR" % (amount, price))
126 except:
127 bot.msg(chan, "Invalid amount.")