Add naiive markov all and allchain
Markov all grows fast and 5 years of data uses about 2gb in memory. We can do better. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -14,6 +14,7 @@ from omnibot.plugin import Plugin
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
ALLCHAIN = "ALL!CHAIN"
|
||||
|
||||
|
||||
def chain_inner_default() -> defaultdict[str | None, int]:
|
||||
@@ -115,9 +116,9 @@ class Chain:
|
||||
fp,
|
||||
)
|
||||
if not retain:
|
||||
self.clear()
|
||||
self.clear_cache()
|
||||
|
||||
def clear(self):
|
||||
def clear_cache(self):
|
||||
self.__cache.clear()
|
||||
|
||||
def __bool__(self) -> bool:
|
||||
@@ -185,8 +186,12 @@ class Markov(Plugin):
|
||||
return self.__chains[channel][who]
|
||||
|
||||
def add(self, channel: str, who: str, line: str):
|
||||
if who == self.server_config.nick == who:
|
||||
return
|
||||
chain = self.get_chain(channel, who)
|
||||
chain.add(line)
|
||||
allchain = self.get_chain(channel, ALLCHAIN)
|
||||
allchain.add(line)
|
||||
|
||||
def handle_command(
|
||||
self, conn: IrcProtocol, channel: str, who: Prefix, parts: Sequence[str]
|
||||
@@ -205,6 +210,11 @@ class Markov(Plugin):
|
||||
message = chain.generate()
|
||||
if message:
|
||||
self.send_to(conn, channel, f"{who.nick}: {message}")
|
||||
case ["all"]:
|
||||
chain = self.get_chain(channel, ALLCHAIN)
|
||||
message = chain.generate()
|
||||
if message:
|
||||
self.send_to(conn, channel, f"{who.nick}: {message}")
|
||||
case _:
|
||||
# command not recognized
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user