From 3e40aaf9f7f278188e78c3f4272ab33f045ef018 Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 5 Sep 2017 22:20:56 +0000 Subject: [PATCH] Use new yaboli version --- infobot.py | 144 +++++++++++++++-------------------------------------- 1 file changed, 39 insertions(+), 105 deletions(-) diff --git a/infobot.py b/infobot.py index 0252660..50a15e0 100644 --- a/infobot.py +++ b/infobot.py @@ -1,122 +1,56 @@ import sys import yaboli +from yaboli.utils import * + + class InfoBot(yaboli.Bot): """ Display information about the clients connected to a room in its nick. """ - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, name): + super().__init__(name) - self.bot_description = ("This bot displays information about the clients connected to the\n" - "current room in its nick: (P B L)\n\n" - "Created by @Garmy using yaboli (https://github.com/Garmelon/yaboli)\n" - "Github: https://github.com/Garmelon/infobot") - - self.add_command("info", self.info_command, "Show more detailed info.", - ("!info @bot [ --list[=] | --name= ]\n" - "--list= : list user names and client/session ids\n" - "--name= : list info for users with the name specified\n" - " can be: people, bots, lurkers, all\n" - " is the name of the person\n\n" - "Shows different information about the clients connected to the\n" - "current room.")) - - self.room.add_callback("sessions", self.update_nick) - - self.update_nick() - - def update_nick(self): - """ - update_nick(self) -> None - - Change the name to display the correct values. - """ - - nick = "\001({}P {}B {}L)".format( - len(self.room.get_people()), - len(self.room.get_bots()) + 1, # we are a bot - len(self.room.get_lurkers()) + self.help_specific = ( + "Displays information about the clients in a room in its nick:\n" + "(P B [L] [N])\n\n" + "Created by @Garmy using yaboli (https://github.com/Garmelon/yaboli)\n" + "Github: https://github.com/Garmelon/infobot (complies with botrulez)" ) - - self.room.set_nick(nick) - def info_command(self, message, arguments, flags, options): - """ - info_command(message, arguments, flags, options) -> None + async def update_nick(self): + p = len(self.room.listing.get(types=["account", "agent"], lurker=False)) + b = 1 + len(self.room.listing.get(types=["bot"], lurker=False)) + l = len(self.room.listing.get(types=["account", "agent"], lurker=True)) + n = len(self.room.listing.get(types=["bot"], lurker=True)) - Send a more verbose message. - """ + name = [] + if p > 0: name.append(f"{p}P") + if b > 0: name.append(f"{b}B") + if l > 0: name.append(f"{l}L") + if n > 0: name.append(f"{n}N") + name = "\u0001(" + " ".join(name) + ")" - if "name" in options and "list" in options: - msg = "Sorry, the --list and --name options can't be used simultaneously." - - elif ("name" in options and options["name"] is not True) or "list" in options: - sessions = self.room.get_sessions() + [self.room.session] - clients = [] - - if "name" in options: - name = self.room.mentionable(options["name"]).lower() - - clients = [c for c in sessions - if self.room.mentionable(c.name).lower() == name] - - if name[:1] == "@": - name = name[1:] - clients.extend([c for c in sessions - if self.room.mentionable(c.name).lower() == name]) - - elif "list" in options: - if options["list"] is True or options["list"] == "all": - clients = self.room.get_sessions() + [self.room.session] - elif options["list"] == "people": - clients = self.room.get_people() - elif options["list"] == "bots": - clients = self.room.get_bots() + [self.room.session] - elif options["list"] == "lurkers": - clients = self.room.get_lurkers() - - if clients: - msg = "" - for client in sorted(clients, key=lambda c: c.name.lower()): - msg += "id={}, session_id={}, name={}\n".format( - repr(client.id), - repr(client.session_id), - repr(client.name) - ) - - msg = msg[:-1] # remove trailing newline - else: - msg = "No clients" - - else: - people = len(self.room.get_people()) - accounts = len(self.room.get_accounts()) - bots = len(self.room.get_bots()) + 1 - lurkers = len(self.room.get_lurkers()) - - msg = "people: {} (with accounts: {})\nbots: {}\nlurkers: {}\ntotal: {}" - msg = msg.format(people, accounts, bots, lurkers, people + bots + lurkers) - - self.room.send_message(msg, message.id) + await self.set_nick(name) + + async def on_join(self, session): + await self.update_nick() + + async def on_part(self, session): + await self.update_nick() + + async def on_snapshot(self, user_id, session_id, version, listing, log, nick=None, + pm_with_nick=None, pm_with_user_id=None): + await self.update_nick() -def main(rooms, imode=False): - manager = yaboli.BotManager(InfoBot, default_nick="infobot") +def main(): + if len(sys.argv) != 2: + print("USAGE:") + print(f" {sys.argv[0]} ") + return - for room in rooms: - manager.create(room) - - #if imode: - #manager.interactive_mode() + run_bot(InfoBot, sys.argv[1], "()") if __name__ == "__main__": - args = sys.argv[1:] - - if "-i" in args: - imode = True - args.remove("-i") - else: - imode=False - - main(args, imode=imode) + main()