diff --git a/.gitignore b/.gitignore index eea2537..9389df1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,11 @@ __pycache__/ */__pycache__/ logs/ -modules_old/ default.cfg *.db *.pid *.dat *.txt +*.swp tourettes.py diff --git a/modules/iot.py b/modules/iot.py index 519d76e..0842796 100755 --- a/modules/iot.py +++ b/modules/iot.py @@ -3,6 +3,8 @@ """ Long live the Internet of Things! """ +import time + import requests import module @@ -34,6 +36,8 @@ def roomTemp(bot, trigger): """ try: res = requests.get("http://192.168.1.25/", timeout=10) + time.sleep(0.5) + res = requests.get("http://192.168.1.25/", timeout=10) except requests.exceptions.ReadTimeout: return bot.say("Connection error. Timeout reached.") except requests.exceptions.ConnectionError: diff --git a/modules/remind.py b/modules/remind.py index 3ff3de2..af11ad0 100755 --- a/modules/remind.py +++ b/modules/remind.py @@ -5,15 +5,14 @@ Reminds of things. import os import re import time +import sqlite3 import threading import collections -import codecs +from datetime import datetime import pytz -from datetime import datetime from module import commands, example, NOLIMIT -import tools from tools.time import get_timezone, format_time def filename(self): @@ -21,37 +20,77 @@ def filename(self): return os.path.join(self.config.core.homedir, name) -def load_database(name): +def init_database(bot): + """ + Initializes the 'remind' table in the bot's database. Does nothing if + the table already exists. + """ + con = bot.db.connect() + cur = con.cursor() + try: + cur.execute("SELECT * FROM remind").fetchone() + except sqlite3.OperationalError: + cur.execute("CREATE TABLE remind(" + "unixtime INT DEFAULT (STRFTIME('%s', 'now'))," + "channel STRING," + "nick STRING," + "message STRING)") + con.commit() + con.close() + + +def load_database(bot): + """ + Loads all entries from the 'remind' table in the bot's database and + stores them in memory + """ data = {} - if os.path.isfile(name): - f = codecs.open(name, 'r') - for line in f: - unixtime, channel, nick, message = line.split('\t') - message = message.rstrip('\n') - t = int(float(unixtime)) # WTFs going on here? - reminder = (channel, nick, message) - try: - data[t].append(reminder) - except KeyError: - data[t] = [reminder] - f.close() + con = bot.db.connect() + cur = con.cursor() + reminds = cur.execute("SELECT * FROM remind").fetchall() + con.close() + + for remind in reminds: + unixtime, channel, nick, message = remind + reminder = (channel, nick, message) + try: + data[unixtime].append(reminder) + except KeyError: + data[unixtime] = [reminder] return data -def dump_database(name, data): - f = codecs.open(name, 'w', encoding='utf-8') - for unixtime, reminders in tools.iteritems(data): - for channel, nick, message in reminders: - f.write('%s\t%s\t%s\t%s\n' % (unixtime, channel, nick, message)) - f.close() +def insert_reminder(bot, unixtime, reminder): + """ + Inserts a new reminder into the 'remind' table in the bot's database. + reminder - a tuple containing (channel, nick, message) + """ + con = bot.db.connect() + cur = con.cursor() + cur.execute("INSERT INTO remind (unixtime, channel, nick, message) " + "VALUES(?,?,?,?)", (unixtime,) + reminder) + con.commit() + con.close() + + +def delete_reminder(bot, unixtime): + """ + Deletes a reminder from the 'remind' table in the bot's database, using + unixtime as the key. + """ + con = bot.db.connect() + cur = con.cursor() + cur.execute("DELETE FROM remind WHERE unixtime = ?", (unixtime,)) + con.commit() + con.close() def setup(bot): - bot.rfn = filename(bot) - bot.rdb = load_database(bot.rfn) + init_database(bot) + bot.rdb = load_database(bot) def monitor(bot): - time.sleep(5) + time.sleep(10) while True: now = int(time.time()) unixtimes = [int(key) for key in bot.rdb] @@ -64,7 +103,7 @@ def setup(bot): else: bot.say(nick + '!', channel) del bot.rdb[oldtime] - dump_database(bot.rfn, bot.rdb) + delete_reminder(bot, oldtime) time.sleep(2.5) targs = (bot,) @@ -207,7 +246,7 @@ def create_reminder(bot, trigger, duration, message, tz): except KeyError: bot.rdb[t] = [reminder] - dump_database(bot.rfn, bot.rdb) + insert_reminder(bot, t, reminder) if duration >= 60: remind_at = datetime.utcfromtimestamp(t) diff --git a/modules/topic.py b/modules/topic.py index 5e873f2..6caeb41 100755 --- a/modules/topic.py +++ b/modules/topic.py @@ -6,6 +6,7 @@ through them. import os import threading import random +import sqlite3 from module import commands, example @@ -18,13 +19,13 @@ def setup(bot): cur = con.cursor() try: cur.execute("SELECT * FROM topic").fetchone() - except: + except sqlite3.OperationalError: cur.execute("CREATE TABLE topic(" "topic STRING PRIMARY KEY," "added_by STRING," "added_date INT DEFAULT (STRFTIME('%s', 'now')))") con.commit() - con.close() + con.close() @commands('topic') @@ -48,8 +49,10 @@ def addTopic(bot, trigger): """ Adds the specified topic to the topic database. """ - bot.memory['topic_lock'].acquire() topic = trigger.group(2) + if not topic: + return bot.say("Please be providing a topic sir.") + bot.memory['topic_lock'].acquire() con = bot.db.connect() cur = con.cursor() insert = (topic, trigger.nick) diff --git a/modules/watcher.py b/modules/watcher.py index 864b1c3..cd22f72 100755 --- a/modules/watcher.py +++ b/modules/watcher.py @@ -28,7 +28,6 @@ def setup(bot): "time_since STRING," "channel STRING)") cur.commit() - con.close() else: for thread in watching: if get_thread_url(thread[0]) in bot.memory["watcher"].keys(): @@ -37,7 +36,7 @@ def setup(bot): thread[4]) t.start() bot.memory["watcher"][get_thread_url(thread[0])] = t - con.close() + con.close() def get_time(): diff --git a/tools/time.py b/tools/time.py index 602c29f..e3dbbb6 100755 --- a/tools/time.py +++ b/tools/time.py @@ -168,10 +168,10 @@ def relativeTime(bot, nick, telldate): if timediff.days: if timediff.days // 365: reltime.append( str(timediff.days // 365) + " year" ) - if timediff.days % 365 // 30: - reltime.append( str(timediff.days % 365 // 30.416).partition(".")[0] + " month") - if timediff.days % 365 % 30: - reltime.append( str(timediff.days % 365 % 30.416).partition(".")[0] + " day") + if timediff.days % 365 // (365/12): + reltime.append( str(timediff.days % 365 // (365/12)).partition(".")[0] + " month") + if timediff.days % 365 % (365/12): + reltime.append( str(timediff.days % 365 % (365/12)).partition(".")[0] + " day") else: if timediff.seconds // 3600: