Optimized futures code
This commit is contained in:
parent
459651de2f
commit
b0f36a1924
@ -23,20 +23,34 @@ class Futures(DatabasePlugin):
|
|||||||
super().__init__(bot)
|
super().__init__(bot)
|
||||||
self.tell_queue = {}
|
self.tell_queue = {}
|
||||||
# Restore timers from database
|
# Restore timers from database
|
||||||
self.cur.execute('select * from timers')
|
self.cur.execute('select id, mask, channel, message, delay, until '
|
||||||
|
'from timers')
|
||||||
for res in self.cur.fetchall():
|
for res in self.cur.fetchall():
|
||||||
delta = res['until'] - datetime.utcnow()
|
delta = res['until'] - datetime.utcnow()
|
||||||
args = (IrcString(res['mask']), res['channel'], delta,
|
args = (IrcString(res['mask']), res['channel'], delta,
|
||||||
res['message'], res['delay'], res['id'])
|
res['message'], res['delay'], res['id'])
|
||||||
asyncio.ensure_future(self._timer(*args))
|
asyncio.ensure_future(self._timer(*args))
|
||||||
# Restore tells from database
|
# Restore tells from database
|
||||||
self.cur.execute('select * from tells')
|
self.cur.execute('select mask, user, message from tells')
|
||||||
for res in self.cur.fetchall():
|
for res in self.cur.fetchall():
|
||||||
user = res['user']
|
user = res['user']
|
||||||
if user not in self.tell_queue:
|
if user not in self.tell_queue:
|
||||||
self.tell_queue[user] = []
|
self.tell_queue[user] = []
|
||||||
self.tell_queue[user].append(res)
|
self.tell_queue[user].append(res)
|
||||||
|
|
||||||
|
@event(r'(?i)^:(?P<mask>.*) PRIVMSG .* :.*')
|
||||||
|
def tell_check(self, mask: str):
|
||||||
|
"""If activ user has tells, forward and delete them."""
|
||||||
|
nick = IrcString(mask).nick
|
||||||
|
if nick in self.tell_queue:
|
||||||
|
for tell in self.tell_queue[nick]:
|
||||||
|
self.bot.privmsg(nick, '[Tell] Message from {nick}: {message}'
|
||||||
|
.format(nick=IrcString(tell['mask']).nick,
|
||||||
|
message=tell['message']))
|
||||||
|
del self.tell_queue[nick]
|
||||||
|
self.cur.execute('delete from tells where user = ?', [nick])
|
||||||
|
self.con.commit()
|
||||||
|
|
||||||
@command
|
@command
|
||||||
def timer(self, mask: IrcString, channel: IrcString, args: DocOptDict):
|
def timer(self, mask: IrcString, channel: IrcString, args: DocOptDict):
|
||||||
"""Sets a timer, delay can be: s, m, h, w, mon, y(
|
"""Sets a timer, delay can be: s, m, h, w, mon, y(
|
||||||
@ -70,15 +84,14 @@ class Futures(DatabasePlugin):
|
|||||||
message = ' '.join(args['<message>'])
|
message = ' '.join(args['<message>'])
|
||||||
if nick not in self.tell_queue:
|
if nick not in self.tell_queue:
|
||||||
self.tell_queue[nick] = []
|
self.tell_queue[nick] = []
|
||||||
self.cur.execute('insert into tells (mask, user, message) values '
|
|
||||||
'(?, ?, ?)', [mask, nick, message])
|
|
||||||
self.con.commit()
|
|
||||||
self.tell_queue[nick].append({
|
self.tell_queue[nick].append({
|
||||||
'id': self.cur.lastrowid,
|
|
||||||
'mask': mask,
|
'mask': mask,
|
||||||
'user': nick,
|
'user': nick,
|
||||||
'message': message,
|
'message': message,
|
||||||
})
|
})
|
||||||
|
self.cur.execute('insert into tells (mask, user, message) values '
|
||||||
|
'(?, ?, ?)', [mask, nick, message])
|
||||||
|
self.con.commit()
|
||||||
|
|
||||||
async def _timer(self, mask: IrcString, channel: IrcString,
|
async def _timer(self, mask: IrcString, channel: IrcString,
|
||||||
delta: timedelta, message: str, delay: str, row_id: int):
|
delta: timedelta, message: str, delay: str, row_id: int):
|
||||||
@ -91,18 +104,3 @@ class Futures(DatabasePlugin):
|
|||||||
self.bot.privmsg(channel, text)
|
self.bot.privmsg(channel, text)
|
||||||
self.cur.execute('delete from timers where id = ?', [row_id])
|
self.cur.execute('delete from timers where id = ?', [row_id])
|
||||||
self.con.commit()
|
self.con.commit()
|
||||||
|
|
||||||
@event(r'(?i)^:(?P<mask>.*) PRIVMSG .* :.*')
|
|
||||||
def tell_check(self, mask: str):
|
|
||||||
nick = IrcString(mask).nick
|
|
||||||
if nick in self.tell_queue:
|
|
||||||
ids = []
|
|
||||||
for tell in self.tell_queue[nick]:
|
|
||||||
ids.append(tell['id'])
|
|
||||||
self.bot.privmsg(nick, '[Tell] Message from {nick}: {message}'
|
|
||||||
.format(nick=IrcString(tell['mask']).nick,
|
|
||||||
message=tell['message']))
|
|
||||||
del self.tell_queue[nick]
|
|
||||||
self.cur.execute('delete from tells where id in ({})'
|
|
||||||
.format(', '.join('?' * len(ids))), ids)
|
|
||||||
self.con.commit()
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user