forked from just-an-dev/sodogetip
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodels.py
84 lines (65 loc) · 2.8 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import re
from random import randint, random
import datetime
import config
import crypto
import user_function
import utils
class Tip(object):
"""Class to represent a tip of user"""
def __init__(self):
self.receiver = None
self.amount = None
self.verify = False
self.sender = None
self.finish = False
self.tx_id = None
self.id = random.randint(0, 99999999)
# reddit message id
self.message_fullname = None,
self.time = datetime.datetime.now().isoformat()
def parse_message(self, message_to_parse, rpc):
p = re.compile('(\+\/u\/' + config.bot_name + ')\s?(@?[0-9a-zA-Z]+)?\s+(\d+|[0-9a-zA-Z]+)\s(doge)\s(verify)?')
m = p.search(message_to_parse.lower().strip())
# Group 1 is +/u/sodogetiptest
# Group 2 is either blank(tip to the commentor), an address, or a user
self.receiver = m.group(1)
# Group 3 is the tip amount in integers(ex. 100) or a word(ex.roll)
self.amount = m.group(3)
# Group 4 is doge
# Group 5 is either blank(no verify message) or verify(verify message)
self.verify = True if (m.group(5) == "verify") else False
# to support send tip to username
if '/u/' in self.receiver:
self.receiver = User(self.receiver[:3])
elif '@' in self.receiver:
self.receiver = User(self.receiver[:1])
# to support send tip to an address
elif len(self.receiver) == 34 and rpc.validateaddress(self.receiver)['isvalid']:
self.receiver = User("address" + self.receiver)
self.receiver.address = self.receiver
# to support any type of randomXXX amount
if 'random' in self.amount and utils.check_amount_valid(self.amount[:6]):
self.amount = randint(1, int(self.amount[:6]))
# here amount is numeric, make magic to support not whole tips
self.amount = round(self.amount - 0.5)
# if amount is all, get balance
if self.amount is 'all':
# get user balance
self.amount = crypto.get_user_spendable_balance(rpc, self.sender.address)
# if tip is over 1000 doge set verify
if int(self.amount) >= 1000:
self.verify = True
def set_sender(self, sender_username):
self.sender = User(sender_username)
def set_receiver(self, receiver_username):
# update only if previous is blank (other case it will be set in parse_message)
if self.receiver is None:
self.receiver = User(receiver_username)
class User(object):
"""Class to represent an user"""
def __init__(self, user):
self.username = user
self.address = None
if user_function.user_exist(self.username):
self.address = user_function.get_user_address(self.username)