]> jfr.im git - erebus.git/commitdiff
add user.bind_bot method
authorJohn Runyon <redacted>
Sat, 23 Mar 2024 07:35:41 +0000 (01:35 -0600)
committerJohn Runyon <redacted>
Sat, 23 Mar 2024 07:35:41 +0000 (01:35 -0600)
recommended usage:
- `user.bind_bot(bot)`
- `user.bind_bot(lib.parent.randbot())`

Wraps a User object in a new object which sends all .msg() through that bot,
instead of through a random bot each time.

erebus.py

index 5ebb39ea548edb67ce3ba50cff0390e5d5580a85..61dd1c9b0e4f97642ad93132fe62aafc0538ceed 100644 (file)
--- a/erebus.py
+++ b/erebus.py
@@ -33,6 +33,9 @@ class Erebus(object): #singleton to pass around
 
                        self.chans = []
 
+               def bind_bot(self, bot):
+                       return main._BoundUser(self, bot)
+
                def msg(self, *args, **kwargs):
                        main.randbot().msg(self, *args, **kwargs)
                def slowmsg(self, *args, **kwargs):
@@ -95,6 +98,22 @@ class Erebus(object): #singleton to pass around
                def __str__(self): return self.nick
                def __repr__(self): return "<User %r (%d)>" % (self.nick, self.glevel)
 
+       class _BoundUser(object):
+               def __init__(self, user, bot):
+                       self.__dict__['_bound_user'] = user
+                       self.__dict__['_bound_bot'] = bot
+               def __getattr__(self, name):
+                       return getattr(self._bound_user, name)
+               def __setattr__(self, name, value):
+                       setattr(self._bound_user, name, value)
+               def msg(self, *args, **kwargs):
+                       self._bound_bot.msg(self._bound_user, *args, **kwargs)
+               def slowmsg(self, *args, **kwargs):
+                       self._bound_bot.slowmsg(self._bound_user, *args, **kwargs)
+               def fastmsg(self, *args, **kwargs):
+                       self._bound_bot.fastmsg(self._bound_user, *args, **kwargs)
+               def __repr__(self): return "<_BoundUser %r %r>" % (self._bound_user, self._bound_bot)
+
        class Channel(object):
                def __init__(self, name, bot):
                        self.name = name