Move the message queuing to IRCContext
This commit is contained in:
parent
6d9017a4bd
commit
e922bb220e
@ -1,3 +1,4 @@
|
|||||||
|
from collections import defaultdict
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
|
||||||
from src.logger import debuglog
|
from src.logger import debuglog
|
||||||
@ -39,6 +40,8 @@ def context_types(*types):
|
|||||||
class IRCContext:
|
class IRCContext:
|
||||||
"""Base class for channels and users."""
|
"""Base class for channels and users."""
|
||||||
|
|
||||||
|
_messages = defaultdict(list)
|
||||||
|
|
||||||
def __init__(self, name, client):
|
def __init__(self, name, client):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.client = client
|
self.client = client
|
||||||
@ -54,6 +57,27 @@ class IRCContext:
|
|||||||
return "NOTICE"
|
return "NOTICE"
|
||||||
return "PRIVMSG"
|
return "PRIVMSG"
|
||||||
|
|
||||||
|
def queue_message(self, message):
|
||||||
|
if self.is_fake:
|
||||||
|
self.send(message) # Don't actually queue it
|
||||||
|
return
|
||||||
|
|
||||||
|
self._messages[message].append(self)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def send_messages(cls, *, notice=False, privmsg=False):
|
||||||
|
for message, targets in cls._messages.items():
|
||||||
|
send_types = defaultdict(list)
|
||||||
|
for target in targets:
|
||||||
|
send_types[target.get_send_type(is_notice=notice, is_privmsg=privmsg)].append(target)
|
||||||
|
for send_type, targets in send_types.items():
|
||||||
|
max_targets = Features["TARGMAX"][send_type]
|
||||||
|
while targets:
|
||||||
|
using, targets = targets[:max_targets], targets[max_targets:]
|
||||||
|
cls._send([message], "", " ", targets[0].client, send_type, ",".join([t.nick for t in using]))
|
||||||
|
|
||||||
|
cls._messages.clear()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_context_type(cls, *, max_types=1):
|
def get_context_type(cls, *, max_types=1):
|
||||||
context_type = []
|
context_type = []
|
||||||
|
23
src/users.py
23
src/users.py
@ -1,4 +1,3 @@
|
|||||||
from collections import defaultdict
|
|
||||||
from weakref import WeakSet
|
from weakref import WeakSet
|
||||||
import fnmatch
|
import fnmatch
|
||||||
import re
|
import re
|
||||||
@ -169,8 +168,6 @@ class User(IRCContext):
|
|||||||
|
|
||||||
is_user = True
|
is_user = True
|
||||||
|
|
||||||
_messages = defaultdict(list)
|
|
||||||
|
|
||||||
def __new__(cls, cli, nick, ident, host, realname, account):
|
def __new__(cls, cli, nick, ident, host, realname, account):
|
||||||
self = super().__new__(cls)
|
self = super().__new__(cls)
|
||||||
super(User, self).__init__(nick, cli)
|
super(User, self).__init__(nick, cli)
|
||||||
@ -408,23 +405,6 @@ class User(IRCContext):
|
|||||||
|
|
||||||
return amount
|
return amount
|
||||||
|
|
||||||
def queue_message(self, message):
|
|
||||||
self._messages[message].append(self)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def send_messages(cls, *, notice=False, privmsg=False):
|
|
||||||
for message, targets in cls._messages.items():
|
|
||||||
send_types = defaultdict(list)
|
|
||||||
for target in targets:
|
|
||||||
send_types[target.get_send_type(is_notice=notice, is_privmsg=privmsg)].append(target)
|
|
||||||
for send_type, targets in send_types.items():
|
|
||||||
max_targets = Features["TARGMAX"][send_type]
|
|
||||||
while targets:
|
|
||||||
using, targets = targets[:max_targets], targets[max_targets:]
|
|
||||||
cls._send([message], "", " ", targets[0].client, send_type, ",".join([t.nick for t in using]))
|
|
||||||
|
|
||||||
cls._messages.clear()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def nick(self): # name should be the same as nick (for length calculation)
|
def nick(self): # name should be the same as nick (for length calculation)
|
||||||
return self.name
|
return self.name
|
||||||
@ -508,9 +488,6 @@ class FakeUser(User):
|
|||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return hash(self.nick)
|
return hash(self.nick)
|
||||||
|
|
||||||
def queue_message(self, message):
|
|
||||||
self.send(message) # don't actually queue it
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def nick(self):
|
def nick(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
Loading…
x
Reference in New Issue
Block a user