Переглянути джерело

refactoring for efficiency

tBKwtWS 6 роки тому
батько
коміт
ca481cfd4e

+ 13 - 13
rotbot/commands/common.py

@@ -118,16 +118,16 @@ class GameHelpers():
             rolls.append(random.randint(1, type))
         return rolls
 
-    def get_info(self, user):
-        total_joins = queries.get_user_total_joins(self, user)
-        total_kicks = queries.get_user_total_kicks(self, user)
-        total_kicked = queries.get_user_total_kicked(self, user)
-        total_messages = queries.get_user_total_messages(self, user)
-        total_actions = queries.get_user_total_actions(self, user)
-        total_notices = queries.get_user_total_notices(self, user)
-        total_cursewords_added = queries.get_user_total_curseword_added(self, user)
-        total_curseadjectives_added = queries.get_user_total_curseadjective_added(self, user)
-        gamestats = queries.get_user_gamestats(self, user)
+    def get_info(self, user_id):
+        total_joins = queries.get_user_total_joins(self, user_id)
+        total_kicks = queries.get_user_total_kicks(self, user_id)
+        total_kicked = queries.get_user_total_kicked(self, user_id)
+        total_messages = queries.get_user_total_messages(self, user_id)
+        total_actions = queries.get_user_total_actions(self, user_id)
+        total_notices = queries.get_user_total_notices(self, user_id)
+        total_cursewords_added = queries.get_user_total_curseword_added(self, user_id)
+        total_curseadjectives_added = queries.get_user_total_curseadjective_added(self, user_id)
+        gamestats = queries.get_user_gamestats(self, user_id)
         xp_spent = gamestats[0]
         level = gamestats[1]
         coin = gamestats[2]
@@ -170,8 +170,8 @@ class GameHelpers():
 
         return level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent
 
-    def player_info(self, user):
-        level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, user)
+    def player_info(self, user_id):
+        level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, user_id)
         #return 'Level: ' + str(level) + font.grey + ", " + font.reset + "XP: " + str(int(xp)) + "/" + font.grey + str(round(total_xp, 4)) + ", " + font.reset + "AP: " + str(int(ap)) + font.grey + ", " + font.reset + "coin: " + str(coin) + font.grey + "[S " + str(coin_spent) + ", G " + str(coin_given) + "], " + font.reset + "karma: " + str(round(karma, 4))
         return 'Level: ' + str(level) + font.grey + ", " + font.reset + "XP: " + str(int(xp)) + "/" + font.grey + str(int(total_xp)) + ", " + font.reset + "AP: " + str(int(ap)) + font.grey + ", " + font.reset + "coin: " + str(coin) + font.grey + "[S " + str(coin_spent) + ", G " + str(coin_given) + "], " + font.reset + "karma: " + str(round(karma, 4))
 
@@ -186,6 +186,6 @@ class GameHelpers():
         message = ""
         for record in result:
             if not int(record[column]) < 1:
-                level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, record)
+                level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, record.id)
                 message += font.red + str(record[1]) + font.grey + " L " + font.green + str(level) + font.grey + ", XP " + font.green + str(int(xp)) + font.grey + "/" + str(int(total_xp)) + ", A " + font.green + str(int(ap)) + font.grey + ", C " + font.green + str(coin) + font.grey + ", K " + font.green + str(round(karma, 2)) + font.grey + ", "
             return message[:-2]

+ 9 - 9
rotbot/commands/games.py

@@ -57,11 +57,11 @@ def do_command(self, connection, event, user, channel):
             connection.privmsg(replyto, 'Too many arguments, For help type: %s%s%s' % (font.blue, self.network.help_character, one))
             return
 
-        info = GameHelpers.player_info(self, player)
+        info = GameHelpers.player_info(self, player.id)
         connection.privmsg(replyto, message + info)
 
     elif one == 'levelup':
-        level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, user)
+        level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, user.id)
         if cmdtype == 'help':    #Display help text.
             connection.privmsg(replyto, 'Spend %s XP to gain your next level. Levelup multiple levels by adding an amount.' %  str(int(level * 2.7)))
             connection.privmsg(replyto, 'Example: %s%s%s 3' % (font.blue, self.network.command_character, one))
@@ -88,12 +88,12 @@ def do_command(self, connection, event, user, channel):
                 return
 
             while xp > int(level * 2.7) and ap > 0 and upgrade_count > 0:
-                queries.levelup_user(self, user, int(level * 2.7))
-                level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, user)
+                queries.levelup_user(self, user.id, int(level * 2.7))
+                level, xp, xp_spent, total_xp, karma, coin, coin_spent, coin_given, ap, ap_spent = GameHelpers.get_info(self, user.id)
 
             if upgrade_count < 0:
                 connection.privmsg(replyto, 'Exhausted XP or AP before levelup was complete. You are only partially levelled up.')
-            info = GameHelpers.player_info(self, user)
+            info = GameHelpers.player_info(self, user.id)
             connection.privmsg(replyto, "Your new statistics: " + info)
 
     elif one == 'givecoin':
@@ -117,7 +117,7 @@ def do_command(self, connection, event, user, channel):
                 try:
                     if float(command.split()[2]) < 0:
                         connection.privmsg(replyto, "You clever abuser! The " + font.red + self.network.command_character + font.bold + "give" + font.bold + "coin" + font.reset + " command is not designed for robbing. There will be consequences...")
-                        queries.punish_user(self, user, -3, -1)
+                        queries.punish_user(self, user_id, -3, -1)
                         return
                 except TypeError:
                     connection.privmsg(replyto, "Invalid amount. For help type " + font.blue + self.network.help_character + "givecoin" + font.reset + ".")
@@ -156,13 +156,13 @@ def do_command(self, connection, event, user, channel):
                 connection.privmsg(replyto, "You have no action points.")
                 return
             if len(command.split()) == 2:
-                queires.cointransfer(self, event.source.nick, command.split()[1])
+                queires.cointransfer(self, user_id, command.split()[1])
             elif len(command.split()) == 3:
                 if coin < command.split()[2]:
                     connection.privmsg(replyto, "You do not have enough coin.")
                     return
-                queires.cointransfer(self, event.source.nick, command.split()[2])
-            info = GameHelpers.player_info(self, event.source.nick)
+                queires.cointransfer(self, sender.id, receiver.id)
+            info = GameHelpers.player_info(self, sender.id)
             connection.notice(event.source.nick, "Your new statistics: " + info)
 
     elif one == 'players':

+ 36 - 34
rotbot/common/queries.py

@@ -136,8 +136,8 @@ def get_channel_setting_game_commands(self, channel_id):
 def get_autojoin_channels(self):
     return self.db.all('SELECT name FROM rotbot_channel WHERE network_id=%(network_id)s AND autojoin=True', network_id=self.network.id)
 
-def update_channel_last_event(self, channel, event_type, event_content):
-    self.db.run('UPDATE rotbot_channel SET last_event_type=%(last_event_type)s, last_event_content=%(last_event_content)s WHERE channel.id=%(channel_id)s', last_event_type=event_type, last_event_content=event_content)
+#def update_channel_last_event(self, channel_id, event_type, event_content):
+#    self.db.run('UPDATE rotbot_channel SET last_event_type=%(last_event_type)s, last_event_content=%(last_event_content)s WHERE channel.id=%(channel_id)s', last_event_type=event_type, last_event_content=event_content, channel_id=channel_id)
 
 def create_tempchannelkey(self, channel_id):
     temp_key = secrets.token_urlsafe(40)[:40]
@@ -158,38 +158,40 @@ def get_userl_slug(self, user_name):
 def get_user_name(self, user_id):
     return self.db.one('SELECT name FROM rotbot_user WHERE id=%(id)s', id=user_id)
 
-def get_user_total_joins(self, user):
-    recordset = self.db.all('SELECT amount FROM rotbot_join WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user.id, network_id=self.network.id)
+def get_user_total_joins(self, user_id):
+    recordset = self.db.all('SELECT amount FROM rotbot_join WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user_id, network_id=self.network.id)
     return total_amount_in_recordset(recordset)
 
-def get_user_total_kicks(self, user):
-    recordset = self.db.all('SELECT amount FROM rotbot_kick WHERE kicker_id=%(user_id)s AND network_id=%(network_id)s', user_id=user.id, network_id=self.network.id)
+def get_user_total_kicks(self, user_id):
+    recordset = self.db.all('SELECT amount FROM rotbot_kick WHERE kicker_id=%(user_id)s AND network_id=%(network_id)s', user_id=user_id, network_id=self.network.id)
     return total_amount_in_recordset(recordset)
 
-def get_user_total_kicked(self, user):
-    recordset = self.db.all('SELECT amount FROM rotbot_kick WHERE kicked_id=%(user_id)s AND network_id=%(network_id)s', user_id=user.id, network_id=self.network.id)
+def get_user_total_kicked(self, user_id):
+    recordset = self.db.all('SELECT amount FROM rotbot_kick WHERE kicked_id=%(user_id)s AND network_id=%(network_id)s', user_id=user_id, network_id=self.network.id)
     return total_amount_in_recordset(recordset)
 
-def get_user_total_messages(self, user):
-    recordset = self.db.all('SELECT amount FROM rotbot_message WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user.id, network_id=self.network.id)
+def get_user_total_messages(self, user_id):
+    recordset = self.db.all('SELECT amount FROM rotbot_message WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user_id, network_id=self.network.id)
     return total_amount_in_recordset(recordset)
 
-def get_user_total_actions(self, user):
-    recordset = self.db.all('SELECT amount FROM rotbot_action WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user.id, network_id=self.network.id)
+def get_user_total_actions(self, user_id):
+    recordset = self.db.all('SELECT amount FROM rotbot_action WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user_id, network_id=self.network.id)
     return total_amount_in_recordset(recordset)
 
-def get_user_total_notices(self, user):
-    recordset = self.db.all('SELECT amount FROM rotbot_notice WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user.id, network_id=self.network.id)
+def get_user_total_notices(self, user_id):
+    recordset = self.db.all('SELECT amount FROM rotbot_notice WHERE user_id=%(user_id)s AND network_id=%(network_id)s', user_id=user_id, network_id=self.network.id)
     return total_amount_in_recordset(recordset)
 
-def get_user_total_curseword_added(self, user):
-    recordset = self.db.all('SELECT id FROM rotbot_curseword WHERE irc_user_id=%(user_id)s ', user_id=user.id)
+def get_user_total_curseword_added(self, user_id):
+    recordset = self.db.all('SELECT id FROM rotbot_curseword WHERE irc_user_id=%(user_id)s ', user_id=user_id)
     return recordset.count(recordset)
 
-def get_user_total_curseadjective_added(self, user):
-    recordset = self.db.all('SELECT id FROM rotbot_curseadjective WHERE irc_user_id=%(user_id)s', user_id=user.id)
+def get_user_total_curseadjective_added(self, user_id):
+    recordset = self.db.all('SELECT id FROM rotbot_curseadjective WHERE irc_user_id=%(user_id)s', user_id=user_id)
     return recordset.count(recordset)
 
+
+# Chat
 def random_curse(self):
     adjective = self.db.one('SELECT word FROM rotbot_curseadjective ORDER BY RANDOM() LIMIT 1')
     curse = self.db.one('SELECT word FROM rotbot_curseword ORDER BY RANDOM() LIMIT 1')
@@ -204,11 +206,11 @@ def add_curseword(self, word, user_id):
 
 
 # Statistics
-def update_message_statistics(self, type, channel, user):
-    if not self.db.one('SELECT id FROM rotbot_' + type + ' WHERE network_id=%(network_id)s AND channel_id=%(channel_id)s AND user_id=%(user_id)s', network_id=self.network.id, channel_id=channel.id ,user_id=user.id):  # Not on record.
-        self.db.run('INSERT INTO rotbot_' + type + ' (network_id, channel_id, user_id, amount) VALUES (%(network_id)s, %(channel_id)s, %(user_id)s, 1)', network_id=self.network.id, channel_id=channel.id ,user_id=user.id)   # Create record.
+def update_message_statistics(self, type, channel_id, user_id):
+    if not self.db.one('SELECT id FROM rotbot_' + type + ' WHERE network_id=%(network_id)s AND channel_id=%(channel_id)s AND user_id=%(user_id)s', network_id=self.network.id, channel_id=channel_id ,user_id=user_id):  # Not on record.
+        self.db.run('INSERT INTO rotbot_' + type + ' (network_id, channel_id, user_id, amount) VALUES (%(network_id)s, %(channel_id)s, %(user_id)s, 1)', network_id=self.network.id, channel_id=channel_id ,user_id=user_id)   # Create record.
     else:   # On record.
-        self.db.run('UPDATE rotbot_' + type + ' SET amount = amount +1 WHERE network_id=%(network_id)s AND channel_id=%(channel_id)s AND user_id=%(user_id)s', network_id=self.network.id, channel_id=channel.id ,user_id=user.id)  # Increment record.
+        self.db.run('UPDATE rotbot_' + type + ' SET amount = amount +1 WHERE network_id=%(network_id)s AND channel_id=%(channel_id)s AND user_id=%(user_id)s', network_id=self.network.id, channel_id=channel_id ,user_id=user_id)  # Increment record.
 
 def increment_join(self, channel_id, user_id):
     if not self.db.one('SELECT id FROM rotbot_join WHERE network_id=%(network_id)s AND channel_id=%(channel_id)s AND user_id=%(user_id)s', network_id=self.network.id, channel_id=channel_id, user_id=user_id):   # No record yet
@@ -216,8 +218,8 @@ def increment_join(self, channel_id, user_id):
     else:
         self.db.run('UPDATE rotbot_join SET amount = amount + 1 WHERE network_id=%(network_id)s AND channel_id=%(channel_id)s AND user_id=%(user_id)s', network_id=self.network.id, channel_id=channel_id, user_id=user_id)   # Update existing record.
 
-def increment_kick(self, channel, user):
-    if not self.db.one('SELECT id FROM rotbot_kick WHERE channel_id=%(channel_id)s AND kicker_id=%(kicker_id)s AND kicked_id=%(kicked_id)s', network_id=self.network.id, channel_id=channel.id, kicker_id=kicker.id, kicked_id=kicked.id): # No records for kicker channel combination.
+def increment_kick(self, channel_id, user_id):
+    if not self.db.one('SELECT id FROM rotbot_kick WHERE channel_id=%(channel_id)s AND kicker_id=%(kicker_id)s AND kicked_id=%(kicked_id)s', network_id=self.network.id, channel_id=channel_id, kicker_id=kicker.id, kicked_id=kicked.id): # No records for kicker channel combination.
         self.db.run('INSERT INTO rotbot_kick (channel_id, kicker_id, kicked_id, amount) VALUES (%(channel_id)s, %(kicker_id)s, %(kicked_id)s), 1', channel_id=channel.id, kicker_id=kicker.id, kicked_id=kicked.id)  # Create record.
     else:
         self.db.run('UPDATE rotbot_kick SET amount = amount + 1 WHERE channel_id=%(channel_id)s AND kicker_id=%(kicker_id)s AND kicked_id=%(kicked_id)s', channel_id=channel.id, kicker_id=kicker.id, kicked_id=kicked.id) # Update record.
@@ -227,24 +229,24 @@ def increment_kick(self, channel, user):
 def get_top_users(self, sort):
     return self.db.all('SELECT id, name, level, xp_spent, coin FROM rotbot_user WHERE network_id=%(network_id)s ORDER BY ' + sort + ' DESC LIMIT 3 ', network_id=self.network.id)
 
-def get_user_gamestats(self, user):
-    return self.db.one('SELECT xp_spent, level, coin, coin_given, coin_spent, ap_spent, karma_correction FROM rotbot_user WHERE id=%(id)s', id=user.id)
+def get_user_gamestats(self, user_id):
+    return self.db.one('SELECT xp_spent, level, coin, coin_given, coin_spent, ap_spent, karma_correction FROM rotbot_user WHERE id=%(id)s', id=user_id)
 
-def levelup_user(self, user, xp):
-    self.db.run('UPDATE rotbot_user SET level=level+1, xp_spent=xp_spent+%(xp)s, ap_spent=ap_spent+1 WHERE id=%(user_id)s', xp=xp, user_id=user.id)
+def levelup_user(self, user_id, xp):
+    self.db.run('UPDATE rotbot_user SET level=level+1, xp_spent=xp_spent+%(xp)s, ap_spent=ap_spent+1 WHERE id=%(user_id)s', xp=xp, user_id=user_id)
     coin = random.uniform(0.1, 0.5)
     payday(self, coin)
 
-def punish_user(self, user, coin, karma):
-    self.db.run('UPDATE website_users SET coin=coin-%(coin)s, karma_correction=karma_correction-%(karma)s WHERE id=%(user_id)s', coin=coin, karma=karma, user_id=user.id)
+def punish_user(self, user_id, coin, karma):
+    self.db.run('UPDATE website_users SET coin=coin-%(coin)s, karma_correction=karma_correction-%(karma)s WHERE id=%(user_id)s', coin=coin, karma=karma, user_id=user_id)
 
 def payday(self, coin):
     self.db.run('UPDATE rotbot_user SET coin=coin+%(coin)s WHERE level>0', user_id=user.id)
 
-def cointransfer(self, sender, receiver, coin):
-    self.db.run('UPDATE rotbot_user SET coin=coin-%(coin)s, coin_spent=coin_spent+%(coin)s, coin_given=coin_given+%(coin)s, ap_spent=ap_spent+1 WHERE id=%(sender_id)s', coin=coin, sender_id=sender.id)
-    self.db.run("UPDATE rotbot_user SET coin=coin+%(coin)s WHERE id=%(user_id)s", coin=coin, id=receiver.id)
-    coin = random.uniform(0.1, 0.5)
+def cointransfer(self, sender_id, receiver_id, coin):
+    self.db.run('UPDATE rotbot_user SET coin=coin-%(coin)s, coin_spent=coin_spent+%(coin)s, coin_given=coin_given+%(coin)s, ap_spent=ap_spent+1 WHERE id=%(sender_id)s', coin=coin, sender_id=sender_id)
+    self.db.run("UPDATE rotbot_user SET coin=coin+%(coin)s WHERE id=%(user_id)s", coin=coin, id=receiver_id)
+    coin = random.uniform(0.1, 0.3)
     payday(self, coin)
 
 # Common.

+ 1 - 1
rotbot/events/on_action.py

@@ -8,7 +8,7 @@ def process_event(self, connection, event):
     user = queries.create_or_get_and_update_last_event(self, 'user', 'ca', channel_name=event.target, user_name=event.source.nick)
     if event.target != connection.get_nickname():   # Channel action.
         channel = queries.create_or_get_and_update_last_event(self, 'channel', 'ca', channel_name=event.target, user_name=event.source.nick)
-        queries.update_message_statistics(self, 'message', channel, user)   # Update message statistics
+        queries.update_message_statistics(self, 'message', channel.id, user.id)   # Update message statistics
 
 
     # # Stop if channelfunction chat if off.

+ 1 - 1
rotbot/events/on_kick.py

@@ -12,7 +12,7 @@ def process_event(self, connection, event):
     kicked = queries.create_or_get_and_update_last_event(self, 'user','ck', channel_name=event.target, user_name=event.arguments[0], event_content=reason, event_subject_name=event.source.nick)
 
     # Record kick event in database.
-    queries.increment_join(self, channel.id, user.id)
+    queries.increment_kick(self, channel.id, user.id)
 
     # # Update protectees if needed.
     # if channel == self.homechannel: # Kicked from home channel

+ 1 - 1
rotbot/events/on_pubmsg.py

@@ -9,7 +9,7 @@ def process_event(self, connection, event):
     channel = queries.create_or_get_and_update_last_event(self, 'channel', 'cm', channel_name=event.target, user_name=event.source.nick)
     user = queries.create_or_get_and_update_last_event(self, 'user', 'cm', channel_name=event.target, user_name=event.source.nick)
 
-    queries.update_message_statistics(self, 'message', channel, user)   # Update message statistics
+    queries.update_message_statistics(self, 'message', channel.id, user.id)   # Update message statistics
 
     commands.public.do_command(self, connection, event, user, channel)
     commands.admin.do_command(self, connection, event, user, channel)

+ 1 - 1
rotbot/events/on_pubnotice.py

@@ -6,4 +6,4 @@ def process_event(self, connection, event):
     # Get and update resources.
     user = queries.create_or_get_and_update_last_event(self, 'user', 'cn', channel_name=event.target, user_name=event.source.nick, event_content=event.arguments[0])
     channel = queries.create_or_get_and_update_last_event(self, 'channel', 'cn', channel_name=event.target, user_name=event.source.nick, event_content=event.arguments[0])
-    queries.update_message_statistics(self, 'message', channel, user)   # Update message statistics
+    queries.update_message_statistics(self, 'message', channel.id, user.id)   # Update message statistics