mirror of
https://git.wownero.com/wownero/tippero.git
synced 2024-08-15 00:33:14 +00:00
Make this more generic - should work for most cryptonote coins now
This commit is contained in:
parent
9464decc86
commit
876bf44545
1 changed files with 32 additions and 22 deletions
54
tipbot.py
54
tipbot.py
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/python
|
#!/bin/python
|
||||||
#
|
#
|
||||||
# Monero tipbot
|
# Cryptonote tipbot
|
||||||
# Copyright 2014 moneromooo
|
# Copyright 2014 moneromooo
|
||||||
# Inspired by "Simple Python IRC bot" by berend
|
# Inspired by "Simple Python IRC bot" by berend
|
||||||
#
|
#
|
||||||
|
@ -20,6 +20,7 @@ tipbot_name = "monero-testnet-tipbot"
|
||||||
irc_network = 'irc.freenode.net'
|
irc_network = 'irc.freenode.net'
|
||||||
irc_port = 6667
|
irc_port = 6667
|
||||||
irc_homechan = '#txtptest000'
|
irc_homechan = '#txtptest000'
|
||||||
|
irc_timeout_seconds = 600
|
||||||
|
|
||||||
redis_host="127.0.0.1"
|
redis_host="127.0.0.1"
|
||||||
redis_port=7777
|
redis_port=7777
|
||||||
|
@ -29,9 +30,14 @@ bitmonerod_port = 28081 # 6060
|
||||||
wallet_host = '127.0.0.1'
|
wallet_host = '127.0.0.1'
|
||||||
wallet_port = 6061
|
wallet_port = 6061
|
||||||
wallet_update_time = 30 # seconds
|
wallet_update_time = 30 # seconds
|
||||||
|
coin=1e12
|
||||||
|
coin_name = "Monero"
|
||||||
|
address_length = [95, 95] # min/max size of addresses
|
||||||
|
address_prefix = ['4', '9'] # allowed prefixes of addresses
|
||||||
withdrawal_fee = 10000000000
|
withdrawal_fee = 10000000000
|
||||||
min_withdraw_amount = 2*withdrawal_fee
|
min_withdraw_amount = 2*withdrawal_fee
|
||||||
withdraw_disabled = False
|
withdraw_disabled = False
|
||||||
|
web_wallet_url = "https://mymonero.com/" # None is there's none
|
||||||
|
|
||||||
admins = ["moneromooo", "moneromoo"]
|
admins = ["moneromooo", "moneromoo"]
|
||||||
|
|
||||||
|
@ -192,14 +198,17 @@ def AmountToString(amount):
|
||||||
if amount == None:
|
if amount == None:
|
||||||
amount = 0
|
amount = 0
|
||||||
lamount=long(amount)
|
lamount=long(amount)
|
||||||
if lamount < 1000000:
|
if coin_name == "monero" or coin_name == "Monero":
|
||||||
samount = "%u tacoshi" % lamount
|
if lamount < 1000000:
|
||||||
elif lamount < 1000000000:
|
samount = "%u tacoshi" % lamount
|
||||||
samount = " %.16g micromonero" % (float(lamount) / 1e6)
|
elif lamount < 1000000000:
|
||||||
elif lamount < 1000000000000:
|
samount = " %.16g micromonero" % (float(lamount) / 1e6)
|
||||||
samount = " %.16g millimonero" % (float(lamount) / 1e9)
|
elif lamount < 1000000000000:
|
||||||
|
samount = " %.16g millimonero" % (float(lamount) / 1e9)
|
||||||
|
else:
|
||||||
|
samount = "%.16g monero" % (float(lamount) / coin)
|
||||||
else:
|
else:
|
||||||
samount = "%.16g monero" % (float(lamount) / 1e12)
|
samount = "%.16g %s" % (float(lamount) / coin, coin_name)
|
||||||
log_log("AmountToString: %s -> %s" % (str(amount),samount))
|
log_log("AmountToString: %s -> %s" % (str(amount),samount))
|
||||||
return samount
|
return samount
|
||||||
|
|
||||||
|
@ -234,13 +243,13 @@ def Tip(nick,data):
|
||||||
SendTo(sendto, "Usage: tip nick amount")
|
SendTo(sendto, "Usage: tip nick amount")
|
||||||
return
|
return
|
||||||
|
|
||||||
log_info("Tip: %s wants to tip %s %s monero" % (nick, who, AmountToString(amount)))
|
log_info("Tip: %s wants to tip %s %s" % (nick, who, AmountToString(amount)))
|
||||||
try:
|
try:
|
||||||
balance = redis.hget("balances",nick)
|
balance = redis.hget("balances",nick)
|
||||||
if balance == None:
|
if balance == None:
|
||||||
balance = 0
|
balance = 0
|
||||||
balance=long(balance)
|
balance=long(balance)
|
||||||
units=long(amount*1e12)
|
units=long(amount*coin)
|
||||||
if units <= 0:
|
if units <= 0:
|
||||||
SendTo(sendto, "Invalid amount")
|
SendTo(sendto, "Invalid amount")
|
||||||
return
|
return
|
||||||
|
@ -288,7 +297,7 @@ def Rain(nick,data):
|
||||||
if users != None and users <= 0:
|
if users != None and users <= 0:
|
||||||
SendTo(sendto, "Usage: rain amount [users]")
|
SendTo(sendto, "Usage: rain amount [users]")
|
||||||
return
|
return
|
||||||
units = long(amount * 1e12)
|
units = long(amount * coin)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
balance = redis.hget("balances",nick)
|
balance = redis.hget("balances",nick)
|
||||||
|
@ -346,10 +355,10 @@ def DisableWithdraw():
|
||||||
|
|
||||||
def Withdraw(nick,data):
|
def Withdraw(nick,data):
|
||||||
address=data[0]
|
address=data[0]
|
||||||
if len(address) != 95:
|
if len(address) < address_length[0] or len(address) > address_length[1]:
|
||||||
SendTo(nick, "Invalid address")
|
SendTo(nick, "Invalid address")
|
||||||
return
|
return
|
||||||
if address[0] != '4' and address[0] != '9':
|
if not address[0] in address_prefix:
|
||||||
SendTo(nick, "Invalid address")
|
SendTo(nick, "Invalid address")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -559,35 +568,36 @@ def DumpUsers(nick,data):
|
||||||
|
|
||||||
def Help(nick):
|
def Help(nick):
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
SendTo(nick, "Help for the monero tipbot:")
|
SendTo(nick, "Help for %s:" % tipbot_name)
|
||||||
SendTo(nick, "!isregistered - show whether you are currently registered with freenode")
|
SendTo(nick, "!isregistered - show whether you are currently registered with freenode")
|
||||||
SendTo(nick, "!balance - show your current balance")
|
SendTo(nick, "!balance - show your current balance")
|
||||||
SendTo(nick, "!tip <nick> <amount> - tip another user")
|
SendTo(nick, "!tip <nick> <amount> - tip another user")
|
||||||
SendTo(nick, "!rain <amount> [<users>] - rain some monero on everyone (or just a few)")
|
SendTo(nick, "!rain <amount> [<users>] - rain some %s on everyone (or just a few)" % coin_name)
|
||||||
SendTo(nick, "!withdraw <address> - withdraw your balance")
|
SendTo(nick, "!withdraw <address> - withdraw your balance")
|
||||||
SendTo(nick, "!info - information about the tipbot")
|
SendTo(nick, "!info - information about the tipbot")
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
SendTo(nick, "You can send monero to your tipbot account:");
|
SendTo(nick, "You can send %s to your tipbot account:" % coin_name);
|
||||||
SendTo(nick, " Address: %s" % GetTipbotAddress())
|
SendTo(nick, " Address: %s" % GetTipbotAddress())
|
||||||
SendTo(nick, " Payment ID: %s" % GetPaymentID(nick))
|
SendTo(nick, " Payment ID: %s" % GetPaymentID(nick))
|
||||||
SendTo(nick, "NO WARRANTY, YOU MAY LOSE YOUR COINS")
|
SendTo(nick, "NO WARRANTY, YOU MAY LOSE YOUR COINS")
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
SendTo(nick, "Minimum withdrawal: %s" % AmountToString(min_withdraw_amount))
|
SendTo(nick, "Minimum withdrawal: %s" % AmountToString(min_withdraw_amount))
|
||||||
SendTo(nick, "Withdrawal fee: %s" % AmountToString(withdrawal_fee))
|
SendTo(nick, "Withdrawal fee: %s" % AmountToString(withdrawal_fee))
|
||||||
SendTo(nick, "No Monero address ? You can use https://mymonero.com/")
|
if web_wallet_url:
|
||||||
|
SendTo(nick, "No %s address ? You can use %s" % (coin_name, web_wallet_url))
|
||||||
|
|
||||||
def Info(nick):
|
def Info(nick):
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
SendTo(nick, "Info for the monero tipbot:")
|
SendTo(nick, "Info for %s:" % tipbot_name)
|
||||||
SendTo(nick, "Type !help for a list of commands")
|
SendTo(nick, "Type !help for a list of commands")
|
||||||
SendTo(nick, "NO WARRANTY, YOU MAY LOSE YOUR COINS")
|
SendTo(nick, "NO WARRANTY, YOU MAY LOSE YOUR COINS")
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
SendTo(nick, "By sending your monero to the tipbot, you are giving up their control")
|
SendTo(nick, "By sending your %s to the tipbot, you are giving up their control" % coin_name)
|
||||||
SendTo(nick, "to whoever runs the tipbot. Any tip you make/receive using the tipbot")
|
SendTo(nick, "to whoever runs the tipbot. Any tip you make/receive using the tipbot")
|
||||||
SendTo(nick, "is obviously not anonymous. The tipbot wallet may end up corrupt, or be")
|
SendTo(nick, "is obviously not anonymous. The tipbot wallet may end up corrupt, or be")
|
||||||
SendTo(nick, "stolen, the server compromised, etc. While I hope this won't be the case,")
|
SendTo(nick, "stolen, the server compromised, etc. While I hope this won't be the case,")
|
||||||
SendTo(nick, "I will not offer any warranty whatsoever for the use of the tipbot or the")
|
SendTo(nick, "I will not offer any warranty whatsoever for the use of the tipbot or the")
|
||||||
SendTo(nick, "return of any monero. Use at your own risk.")
|
SendTo(nick, "return of any %s. Use at your own risk." % coin_name)
|
||||||
SendTo(nick, "That being said, I hope you enjoy using it :)")
|
SendTo(nick, "That being said, I hope you enjoy using it :)")
|
||||||
|
|
||||||
def InitScanBlockHeight():
|
def InitScanBlockHeight():
|
||||||
|
@ -722,8 +732,8 @@ while True:
|
||||||
UpdateCoin()
|
UpdateCoin()
|
||||||
|
|
||||||
if data == None:
|
if data == None:
|
||||||
if time.time() - last_ping_time > 600:
|
if time.time() - last_ping_time > irc_timeout_seconds:
|
||||||
log_warn('600 seconds without PING, reconnecting')
|
log_warn('%s seconds without PING, reconnecting' % irc_timeout_seconds)
|
||||||
last_ping_time = time.time()
|
last_ping_time = time.time()
|
||||||
connect_to_irc(irc_network,irc_port)
|
connect_to_irc(irc_network,irc_port)
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in a new issue