5
5
6
6
from message_logger import MessageLogger
7
7
from karma .karma_manager import KarmaManager
8
+ from karma .karma_rate import KarmaRateLimiter
8
9
9
10
class IRCBot (irc .IRCClient ):
10
11
"""Python Twisted IRC BOT. irc.IRCClient specialization."""
@@ -25,13 +26,11 @@ def connectionMade(self):
25
26
time .asctime (time .localtime (time .time ()))
26
27
)
27
28
self .karma_manager = KarmaManager (self .factory .data_folder )
29
+ self .karmrator = KarmaRateLimiter ()
28
30
29
31
def connectionLost (self , reason ):
30
32
irc .IRCClient .connectionLost (self , reason )
31
- self .logger .log (
32
- "[disconnected at %s]" %
33
- time .asctime (time .localtime (time .time ()))
34
- )
33
+ self .logger .log ("[disconnected at %s]" % self .get_current_timestamp () )
35
34
self .logger .close ()
36
35
37
36
# TODO (sentenza) ConfigManager password
@@ -79,7 +78,6 @@ def privmsg(self, user, channel, msg):
79
78
def evaluate_command (self , user , channel , msg ):
80
79
# check for commands starting with bang!
81
80
if msg .startswith ('!karma' ):
82
- print ("<%s> send a karma command: %s" % (user ,msg ))
83
81
msg_splits = msg .split ()
84
82
if len (msg_splits ) == 1 :
85
83
fetch_user = user
@@ -89,14 +87,22 @@ def evaluate_command(self, user, channel, msg):
89
87
self .msg (channel , self .karma_manager .fetch_karma (fetch_user ))
90
88
91
89
def karma_update (self , user , channel , msg ):
92
- nickname = msg [:- 2 ]
93
- print "karma command: %s. user affected: %s" % (msg , nickname )
94
- if nickname == user :
95
- self .msg (channel , "%s: you can't alter your own karma!" % user )
96
- return
97
- if msg .endswith ('++' ):
98
- self .karma_manager .update_karma (nickname , plus = True )
99
- if msg .endswith ('--' ):
100
- self .karma_manager .update_karma (nickname , plus = False )
101
-
90
+ """Try to modify the Karma for a given nickname"""
91
+ receiver_nickname = msg [:- 2 ]
92
+ # TODO (sentenza) Check if the given nick is present on DB or if is on chan with /WHO command
93
+ if receiver_nickname == user :
94
+ self .msg (channel , "%s: you can't alter your own karma!" % user )
95
+ return
96
+ if self .karmrator .is_rate_limited (user ):
97
+ waiting_minutes = self .karmrator .user_timeout (user ) / 60
98
+ self .msg (channel , "%s: you have to wait %s min for your next karmic request!" % (user , waiting_minutes ))
99
+ return
100
+ if msg .endswith ('++' ):
101
+ self .karma_manager .update_karma (receiver_nickname , plus = True )
102
+ if msg .endswith ('--' ):
103
+ self .karma_manager .update_karma (receiver_nickname , plus = False )
104
+ self .msg (channel , self .karma_manager .fetch_karma (receiver_nickname ))
105
+ self .logger .log ("%s modified Karma: %s" % (user , receiver_nickname ))
102
106
107
+ def get_current_timestamp (self ):
108
+ return time .asctime (time .localtime (time .time ()))
0 commit comments