Pārlūkot izejas kodu

reference table for messages

tBKwtWS 7 gadi atpakaļ
vecāks
revīzija
a120bdaadf

+ 1 - 1
.eric6project/pyRot.e4q

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE UserProject SYSTEM "UserProject-4.0.dtd">
 <!-- eric6 user project file for project pyRot -->
-<!-- Saved: 2018-01-30, 00:44:45 -->
+<!-- Saved: 2018-01-30, 19:14:24 -->
 <!-- Copyright (C) 2018 tBKwtWS,  -->
 <UserProject version="4.0"/>

+ 3 - 3
.eric6project/pyRot.e6t

@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE Tasks SYSTEM "Tasks-6.0.dtd">
 <!-- eric6 tasks file for project pyRot -->
-<!-- Saved: 2018-01-30, 17:07:04 -->
+<!-- Saved: 2018-01-30, 22:44:33 -->
 <Tasks version="6.0">
   <ProjectScanFilter></ProjectScanFilter>
-  <Task priority="1" completed="False" type="2" uid="{6fba5483-7aac-4f85-85f1-bcf11fb6f5c0}">
+  <Task priority="1" completed="False" type="2" uid="{5a7eaf98-6258-47eb-ba12-47f6699b98a0}">
     <Summary>WARNING: &quot; + str(message))</Summary>
     <Description></Description>
-    <Created>2018-01-30, 17:07:01</Created>
+    <Created>2018-01-30, 22:44:30</Created>
     <Resource>
       <Filename>common/log.py</Filename>
       <Linenumber>8</Linenumber>

+ 9 - 2
events/common.py

@@ -95,5 +95,12 @@ class Lastact():
             values = values + ", %s"
             parameters = parameters + (auxiliary, )
         self.db.run("UPDATE users SET (" + fields + ") = (" + values + ") WHERE name='" + name + "' AND network='" + self.network + "'", parameters)
-        
-        
+
+class MessageStatistics():
+    def update(self, event, type):
+        type = type + "s"
+        if not self.db.one("SELECT id FROM \"users\" WHERE name='" + event.source.nick + "' AND network='" + self.network + "'"):    # User not on record.
+            self.db.run("INSERT INTO \"users\" (name, network) VALUES ('" + event.source.nick + "', '" + self.network + "')")   # Create record.
+        if not self.db.one("SELECT id FROM messages WHERE channel='" + event.target + "' AND channel_network='" + self.network + "' AND \"user\"='" + event.source.nick + "' AND user_network='" + self.network + "'"):    # Not on record.
+            self.db.run("INSERT INTO messages (type, channel, channel_network, \"user\", user_network) VALUES ('" + type + "', '" + event.target + "', '" + self.network + "', '" + event.source.nick + "', '" + self.network + "')")   # Create record.
+        self.db.run("UPDATE messages SET " + type + "=" + type + "+1, " + type + "_words=" + type + "_words+" + str(len(event.arguments[0].split())) + ", " + type + "_characters=" + type + "_characters+" + str(len(event.arguments[0])) + " WHERE channel='" + event.target + "' AND channel_network='" + self.network + "' AND \"user\"='" + event.source.nick + "' AND user_network='" + self.network + "'")   # Increment record.

+ 3 - 5
events/on_action.py

@@ -1,5 +1,5 @@
 from common import userstatus
-from events.common import Replyto, Lastact
+from events.common import Replyto, Lastact, MessageStatistics
 
 bold = "\x02"
 italic = "\x1D"
@@ -12,14 +12,12 @@ red = "\x0304"
 grey = "\x0314"
 
 def process_event(self, connection, event):
+    
     # Update last act.
     Lastact.update(self, event.source.nick, "action", channel=event.target, lastact=event.arguments[0])
     
     # Save statistic to database.
-    if not self.db.one("SELECT id FROM \"users\" WHERE name='" + event.source.nick + "' AND network='" + self.network + "'"):    # Not on record.
-        self.db.run("INSERT INTO \"users\" (name, network) VALUES ('" + event.source.nick + "', '" + self.network + "')")   # Create record.
-    
-    self.db.run("UPDATE \"users\" SET actions=actions+1, actions_words=actions_words+" + str(len(event.arguments[0].split())) + ", actions_characters=actions_characters+" + str(len(event.arguments[0])) + " WHERE name='" + event.source.nick + "' AND network='" + self.network + "'") # Increment record.
+    MessageStatistics.update(self, event, "action")
     
     # Stop if channelfunction chat if off.
     if not self.db.one("SELECT chat FROM channels WHERE name='" + event.target + "' AND network='" + self.network + "'"):

+ 2 - 4
events/on_pubmsg.py

@@ -1,5 +1,5 @@
 import datetime
-from events.common import Replyto,  Lastact
+from events.common import Replyto,  Lastact, MessageStatistics
 
 def process_event(self, connection, event):
     
@@ -7,9 +7,7 @@ def process_event(self, connection, event):
     Lastact.update(self, event.source.nick, "msg", channel=event.target, lastact=event.arguments[0])
     
     # Save statistic to database.
-    if not self.db.one("SELECT id FROM \"users\" WHERE name='" + event.source.nick + "' AND network='" + self.network + "'"):    # Not on record.
-        self.db.run("INSERT INTO \"users\" (name, network) VALUES ('" + event.source.nick + "', '" + self.network + "')")   # Create record.
-    self.db.run("UPDATE \"users\" SET messages=messages+1, messages_words=messages_words+" + str(len(event.arguments[0].split())) + ", messages_characters=messages_characters+" + str(len(event.arguments[0])) + " WHERE name='" + event.source.nick + "' AND network='" + self.network + "'") # Increment record.
+    MessageStatistics.update(self, event, "message")
     
     if connection.get_nickname().lower() in event.arguments[0].lower() and event.source.nick is not connection.get_nickname(): # Bot's name was mentioned
         if event.arguments[0].startswith(self.cmdchar):

+ 1 - 2
pyRot.e4p

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE Project SYSTEM "Project-5.1.dtd">
 <!-- eric project file for project pyRot -->
-<!-- Saved: 2018-01-27, 19:55:21 -->
+<!-- Saved: 2018-01-30, 19:14:24 -->
 <!-- Copyright (C) 2018 tBKwtWS,  -->
 <Project version="5.1">
   <Language>en_US</Language>
@@ -34,7 +34,6 @@
     <Source>events/on_whoreply.py</Source>
     <Source>original_testbot.py</Source>
     <Source>rotbot.py</Source>
-    <Source>test.py</Source>
   </Sources>
   <Forms/>
   <Translations/>

+ 4 - 6
rotbot.py

@@ -8,7 +8,7 @@ import commands.public, commands.admin, commands.games, commands.statistics
 import events.on_welcome, events.on_join, events.on_kick, events.on_mode, events.on_pubmsg, events.on_action, events.on_whoreply, events.on_nick
 from common import log
 from common.networkservices import NickServ
-from events.common import Lastact
+from events.common import Lastact, MessageStatistics
 
 bold = "\x02"
 italic = "\x1D"
@@ -121,13 +121,11 @@ class PyRot(irc.bot.SingleServerIRCBot):
     def on_pubnotice(self, connection, event):
         log.info(event)
         
-        # Save statistic to database.
-        if not self.db.one("SELECT id FROM \"users\" WHERE name='" + event.source.nick + "' AND network='" + self.network + "'"):    # Not on record.
-            self.db.run("INSERT INTO \"users\" (name, network) VALUES ('" + event.source.nick + "', '" + self.network + "')")   # Create record.
-        self.db.run("UPDATE \"users\" SET notices=notices+1, notices_words=notices_words+" + str(len(event.arguments[0].split())) + ", notices_characters=notices_characters+" + str(len(event.arguments[0])) + " WHERE name='" + event.source.nick + "' AND network='" + self.network + "'") # Increment record.
-        
         # Update last act.
         Lastact.update(self, event.source.nick, "notice", channel=event.target, lastact=event.arguments[0])
+        
+        # Save statistic to database.
+        MessageStatistics.update(self, event, "notice")
     
     def on_privnotice(self,  connection,  event):
         log.info(event)

+ 17 - 0
sql/create joins.sql

@@ -0,0 +1,17 @@
+-- Table: public.channels
+
+-- DROP TABLE public.channels;
+
+CREATE TABLE public.joins
+(
+  id serial PRIMARY KEY,
+  channel character varying(64) NOT NULL,
+  channel_network character varying(40) NOT NULL,
+  "user" character varying(31) NOT NULL,
+  user_network character varying(40) NOT NULL, 
+  FOREIGN KEY (channel, channel_network) REFERENCES channels(name, network),
+  FOREIGN KEY ("user", user_network) REFERENCES users(name, network),
+  UNIQUE (channel, channel_network, "user", user_network)
+);
+ALTER TABLE public.channels
+  OWNER TO "pyRot";

+ 15 - 0
sql/create kicks.sql

@@ -0,0 +1,15 @@
+CREATE TABLE public.kicks
+(
+   id serial PRIMARY KEY, 
+   channel character varying(64) NOT NULL, 
+   channel_network character varying(40) NOT NULL, 
+   "user" character varying(31) NOT NULL, 
+   user_network character varying(40) NOT NULL, 
+   given integer DEFAULT 0, 
+   received integer DEFAULT 0,
+   FOREIGN KEY (channel, channel_network) REFERENCES channels(name, network),
+   FOREIGN KEY ("user", user_network) REFERENCES users(name, network),
+   unique(channel, channel_network, "user", user_network)
+);
+ALTER TABLE public.kicks
+  OWNER TO "pyRot";

+ 23 - 0
sql/create_messages.sql

@@ -0,0 +1,23 @@
+CREATE TABLE public.messages
+(
+   id serial PRIMARY KEY, 
+   type character varying(10) NOT NULL,
+   channel character varying(64) NOT NULL, 
+   channel_network character varying(40) NOT NULL, 
+   "user" character varying(31) NOT NULL, 
+   user_network character varying(40) NOT NULL, 
+   messages integer DEFAULT 0, 
+   messages_words bigint DEFAULT 0, 
+   messages_characters bigint DEFAULT 0, 
+   actions integer DEFAULT 0,
+   actions_words bigint DEFAULT 0,
+   actions_characters bigint DEFAULT 0,
+   notices integer DEFAULT 0,
+   notices_words bigint DEFAULT 0,
+   notices_characters bigint DEFAULT 0,
+   FOREIGN KEY (channel, channel_network) REFERENCES channels(name, network),
+   FOREIGN KEY ("user", user_network) REFERENCES users(name, network),
+   unique(channel, channel_network, "user", user_network)
+);
+ALTER TABLE public.messages
+  OWNER TO "pyRot";

+ 19 - 0
sql/create_users.sql

@@ -0,0 +1,19 @@
+CREATE TABLE public.users
+(
+   id serial PRIMARY KEY, 
+   name character varying(31) NOT NULL, 
+   network character varying(40) NOT NULL references networks(name), 
+   messages bigint, 
+   actions bigint, 
+   notices bigint, 
+   last_act_type character varying(20), 
+   last_act_datetime timestamp without time zone, 
+   last_act_channel character varying(64), 
+   last_act_channel_network character varying(40), 
+   last_act character varying(510),
+   FOREIGN KEY (last_act_channel, last_act_channel_network) REFERENCES channels(name, network),
+   UNIQUE (name, network)
+) 
+;
+ALTER TABLE public.users
+  OWNER TO "pyRot";