Added persistent tell command
This commit is contained in:
parent
84a03573b0
commit
4414a3ade7
|
@ -5,7 +5,7 @@ import asyncio
|
||||||
from docopt import Dict as DocOptDict
|
from docopt import Dict as DocOptDict
|
||||||
from irc3.plugins.command import command
|
from irc3.plugins.command import command
|
||||||
from irc3.utils import IrcString
|
from irc3.utils import IrcString
|
||||||
from irc3 import IrcBot
|
from irc3 import IrcBot, event
|
||||||
import irc3
|
import irc3
|
||||||
|
|
||||||
from . import DatabasePlugin
|
from . import DatabasePlugin
|
||||||
|
@ -21,6 +21,7 @@ class Futures(DatabasePlugin):
|
||||||
|
|
||||||
def __init__(self, bot: IrcBot):
|
def __init__(self, bot: IrcBot):
|
||||||
super().__init__(bot)
|
super().__init__(bot)
|
||||||
|
self.tell_queue = {}
|
||||||
# Restore timers from database
|
# Restore timers from database
|
||||||
self.cur.execute('select * from timers')
|
self.cur.execute('select * from timers')
|
||||||
for res in self.cur.fetchall():
|
for res in self.cur.fetchall():
|
||||||
|
@ -51,6 +52,27 @@ class Futures(DatabasePlugin):
|
||||||
else:
|
else:
|
||||||
self.bot.privmsg(channel, 'Invalid timer delay')
|
self.bot.privmsg(channel, 'Invalid timer delay')
|
||||||
|
|
||||||
|
# noinspection PyUnusedLocal
|
||||||
|
@command
|
||||||
|
def tell(self, mask: IrcString, channel: IrcString, args: DocOptDict):
|
||||||
|
"""Saves a message for nick to forward on activity
|
||||||
|
|
||||||
|
%%tell <nick> <message>...
|
||||||
|
"""
|
||||||
|
nick = args['<nick>']
|
||||||
|
message = ' '.join(args['<message>'])
|
||||||
|
if nick not in self.tell_queue:
|
||||||
|
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({
|
||||||
|
'id': self.cur.lastrowid,
|
||||||
|
'mask': mask,
|
||||||
|
'user': nick,
|
||||||
|
'message': message,
|
||||||
|
})
|
||||||
|
|
||||||
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):
|
||||||
"""Async function, sleeps for `delay` seconds and sends notification"""
|
"""Async function, sleeps for `delay` seconds and sends notification"""
|
||||||
|
@ -62,3 +84,18 @@ 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()
|
||||||
|
|
|
@ -20,3 +20,11 @@ create table if not exists timers (
|
||||||
until timestamp not null,
|
until timestamp not null,
|
||||||
created timestamp not null default current_timestamp
|
created timestamp not null default current_timestamp
|
||||||
);
|
);
|
||||||
|
|
||||||
|
create table if not exists tells (
|
||||||
|
id integer primary key autoincrement,
|
||||||
|
mask text not null,
|
||||||
|
user text not null,
|
||||||
|
message text not null,
|
||||||
|
created timestamp not null default current_timestamp
|
||||||
|
);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user