You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
9.1 KiB
180 lines
9.1 KiB
#!/usr/bin/env python |
|
""" |
|
.. module:: DogeWallet |
|
:synopsis: Module to provide a Dogecoin wallet |
|
|
|
.. moduleauthor:: Dave Pedu <dave@davepedu.com> |
|
|
|
""" |
|
|
|
from pyircbot.modulebase import ModuleBase, ModuleHook |
|
import time |
|
import hashlib |
|
|
|
|
|
class DogeWallet(ModuleBase): |
|
def __init__(self, bot, moduleName): |
|
ModuleBase.__init__(self, bot, moduleName) |
|
self.hooks = [ModuleHook("PRIVMSG", self.gotmsg)] |
|
# Load attribute storage |
|
self.attr = self.bot.getBestModuleForService("attributes") |
|
# Load doge RPC |
|
self.doge = self.bot.getBestModuleForService("dogerpc") |
|
|
|
def gotmsg(self, args, prefix, trailing): |
|
channel = args[0] |
|
if channel[0] == "#": |
|
# Ignore channel messages |
|
pass |
|
else: |
|
self.handlePm(args, prefix, trailing) |
|
|
|
def handlePm(self, args, prefix, trailing): |
|
prefix = self.bot.decodePrefix(prefix) |
|
cmd = self.bot.messageHasCommand(".setpass", trailing) |
|
if cmd: |
|
if len(cmd.args) == 0: |
|
self.bot.act_PRIVMSG(prefix.nick, ".setpass: usage: \".setpass newpass\" or " |
|
"\".setpass oldpass newpass\"") |
|
else: |
|
oldpass = self.attr.getKey(prefix.nick, "password") |
|
if oldpass is None: |
|
self.attr.setKey(prefix.nick, "password", cmd.args[0]) |
|
self.bot.act_PRIVMSG(prefix.nick, ".setpass: Your password has been set to \"%s\"." % cmd.args[0]) |
|
else: |
|
if len(cmd.args) == 2: |
|
if cmd.args[0] == oldpass: |
|
self.attr.setKey(prefix.nick, "password", cmd.args[1]) |
|
self.bot.act_PRIVMSG(prefix.nick, ".setpass: Your password has been set to \"%s\"." % |
|
cmd.args[1]) |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".setpass: Old password incorrect.") |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".setpass: You must provide the old password when setting a " |
|
"new one.") |
|
cmd = self.bot.messageHasCommand(".setdogeaddr", trailing) |
|
if cmd: |
|
userpw = self.attr.getKey(prefix.nick, "password") |
|
if userpw is None: |
|
self.bot.act_PRIVMSG(prefix.nick, ".setdogeaddr: You must first set a password with .setpass") |
|
else: |
|
if len(cmd.args) == 2: |
|
if userpw == cmd.args[0]: |
|
self.attr.setKey(prefix.nick, "dogeaddr", cmd.args[1]) |
|
self.bot.act_PRIVMSG(prefix.nick, ".setdogeaddr: Your doge address has been set to \"%s\"." % |
|
cmd.args[1]) |
|
# if they don't have a wallet name, we'll make one now |
|
if self.attr.getKey(prefix.nick, "dogeaccountname") is None: |
|
randName = self.md5(str(time.time()))[0:10] |
|
self.attr.setKey(prefix.nick, "dogeaccountname", randName) |
|
|
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".setdogeaddr: incorrect password.") |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".setdogeaddr: usage: \".setdogeaddr password address\" or " |
|
"\".setdogeaddr mypassword D8VNy3zkMGspffcFSWWqsxx7GrtVsmF2up\"") |
|
|
|
cmd = self.bot.messageHasCommand(".getdogebal", trailing) |
|
if cmd: |
|
userpw = self.attr.getKey(prefix.nick, "password") |
|
if userpw is None: |
|
self.bot.act_PRIVMSG(prefix.nick, ".getdogebal: You must first set a password with .setpass") |
|
else: |
|
if len(cmd.args) == 1: |
|
if userpw == cmd.args[0]: |
|
################# |
|
walletname = self.attr.getKey(prefix.nick, "dogeaccountname") |
|
amount = 0.0 |
|
if walletname: |
|
amount = self.doge.getBal(walletname) |
|
|
|
self.bot.act_PRIVMSG(prefix.nick, ".getdogebal: Your balance is: %s DOGE" % amount) |
|
|
|
################# |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".getdogebal: incorrect password.") |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".getdogebal: usage: \".getdogebal password\"") |
|
|
|
cmd = self.bot.messageHasCommand(".withdrawdoge", trailing) |
|
if cmd: |
|
userpw = self.attr.getKey(prefix.nick, "password") |
|
useraddr = self.attr.getKey(prefix.nick, "dogeaddr") |
|
if userpw is None: |
|
self.bot.act_PRIVMSG(prefix.nick, ".withdrawdoge: You must first set a password with .setpass") |
|
elif useraddr is None: |
|
self.bot.act_PRIVMSG(prefix.nick, ".withdrawdoge: You must first set a withdraw address .setdogeaddr") |
|
else: |
|
if len(cmd.args) == 2: |
|
if userpw == cmd.args[0]: |
|
################# |
|
walletname = self.attr.getKey(prefix.nick, "dogeaccountname") |
|
walletbal = self.doge.getBal(walletname) |
|
|
|
desiredAmount = float(cmd.args[1]) |
|
|
|
if walletbal >= desiredAmount: |
|
txn = self.doge.send(walletname, useraddr, desiredAmount) |
|
if txn: |
|
self.bot.act_PRIVMSG(prefix.nick, ".withdrawdoge: %s DOGE sent to %s. Transaction ID: " |
|
"%s" % (desiredAmount, useraddr, txn)) |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".withdrawdoge: Unable to create transaction. " |
|
"Please contact an Operator.") |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".withdrawdoge: You only have %s DOGE. You cannot " |
|
"withdraw %s DOGE." % (walletbal, desiredAmount)) |
|
################# |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".withdrawdoge: incorrect password.") |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".withdrawdoge: usage: \".withdrawdoge password amount\" - " |
|
"\".withdrawdoge mypassword 5.0\" - ") |
|
|
|
cmd = self.bot.messageHasCommand(".getdepositaddr", trailing) |
|
if cmd: |
|
userpw = self.attr.getKey(prefix.nick, "password") |
|
if userpw is None: |
|
self.bot.act_PRIVMSG(prefix.nick, ".getdepositaddr: You must first set a password with .setpass") |
|
else: |
|
if len(cmd.args) == 1: |
|
if userpw == cmd.args[0]: |
|
################# |
|
walletname = self.attr.getKey(prefix.nick, "dogeaccountname") |
|
addr = self.doge.getAcctAddr(walletname) |
|
self.bot.act_PRIVMSG(prefix.nick, ".getdepositaddr: Your deposit address is: %s" % addr) |
|
################# |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".getdepositaddr: incorrect password.") |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".getdepositaddr: usage: \".getdepositaddr password\"") |
|
|
|
cmd = self.bot.messageHasCommand(".login", trailing) |
|
if cmd: |
|
userpw = self.attr.getKey(prefix.nick, "password") |
|
if userpw is None: |
|
self.bot.act_PRIVMSG(prefix.nick, ".login: You must first set a password with .setpass") |
|
else: |
|
if len(cmd.args) == 1: |
|
if userpw == cmd.args[0]: |
|
################# |
|
self.attr.setKey(prefix.nick, "loggedinfrom", prefix.hostname) |
|
self.bot.act_PRIVMSG(prefix.nick, ".login: You have been logged in from: %s" % prefix.hostname) |
|
################# |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".login: incorrect password.") |
|
else: |
|
self.bot.act_PRIVMSG(prefix.nick, ".login: usage: \".login password\"") |
|
cmd = self.bot.messageHasCommand(".logout", trailing) |
|
if cmd: |
|
loggedin = self.attr.getKey(prefix.nick, "loggedinfrom") |
|
if loggedin is None: |
|
self.bot.act_PRIVMSG(prefix.nick, ".logout: You must first be logged in") |
|
else: |
|
self.attr.setKey(prefix.nick, "loggedinfrom", None) |
|
self.bot.act_PRIVMSG(prefix.nick, ".logout: You have been logged out.") |
|
|
|
def md5(self, data): |
|
m = hashlib.md5() |
|
m.update(data.encode("ascii")) |
|
return m.hexdigest()
|
|
|