async def addme(bot, event, *args): """let a user add himself to a conversation Args: bot: HangupsBot instance event: event.ConversationEvent instance args: tuple, additional words passed to the command """ if not args: raise commands.Help(_("supply the id of the conversation to join")) if args[0] not in bot.conversations: raise commands.Help(_("I am not attending this conversation")) await addusers(bot, event, *[event.user_id.chat_id, "into", args[0]])
def start(): global client if client is not None: client.logout() del client client = imp.Imp() client.login(imp.internal_config['discord']['email'], imp.internal_config['discord']['password']) client.register_command(commands.Countdown(), 'countdown') client.register_command(commands.IsUp(), 'isup') client.register_command(commands.PyEval(), 'py') client.register_command(commands.Wolfram(), 'wa') client.register_command(commands.Calc(), 'calc') client.register_command(commands.Reload(), 'reload') client.register_command(commands.Me(), "me") client.register_command(commands.Ignore(), "ignore") client.register_command(commands.Roll(), "roll") client.register_command(commands.Everyone(), "everyone") client.register_command(commands.Whois(), "whois") client.register_command(commands.Ping(), "ping") client.register_command(commands.Save(), "save") client.register_command(commands.Load(), "load") client.register_command(commands.Help(), "help") client.register_command(commands.Kill(), "kill") client.register_command(commands.Info(), "info") client.register_command(commands.Set(), "set") client.register_command(commands.Get(), "get") client.register_command(commands.Echo(), "echo") client.register_command(commands.Awesome(), "awesome") updater_thread = updater.GitUpdater() updater_thread.start() client.run()
async def createconversation(bot, dummy, *args): """create a new conversation with given users Args: bot: HangupsBot instance dummy: event.ConversationEvent instance args: tuple, additional words passed to the command """ user_ids = [chat_id for chat_id in set(args) if len(chat_id) == 21 and chat_id.isdigit()] if not user_ids: raise commands.Help('supply G+ Ids to add') logger.info("createconversation: %s", user_ids) _response = await bot.create_conversation( hangups.hangouts_pb2.CreateConversationRequest( request_header=bot.get_request_header(), type=hangups.hangouts_pb2.CONVERSATION_TYPE_GROUP, client_generated_id=bot.get_client_generated_id(), invitee_id=[hangups.hangouts_pb2.InviteeID(gaia_id=chat_id) for chat_id in user_ids])) new_conversation_id = _response.conversation.conversation_id.id return (new_conversation_id, _("<i>conversation created</i>"))
async def addusers(bot, event, *args): """add users from a conversation Args: bot: HangupsBot instance event: event.ConversationEvent instance args: tuple, additional words passed to the command """ list_add = [] target_conv = event.conv_id state = ["adduser"] for parameter in args: if parameter == "into": state.append("targetconv") else: if state[-1] == "adduser": list_add.append(parameter) elif state[-1] == "targetconv": target_conv = parameter state.pop() else: raise commands.Help("UNKNOWN STATE: {}".format(state[-1])) list_add = list(set(list_add)) added = 0 if list_add: added = await _batch_add_users(bot, target_conv, list_add) logger.info("addusers: %s added to %s", added, target_conv)
async def kick(bot, event, *args): """refresh the a conversation without certain users Args: bot: HangupsBot instance event: event.ConversationEvent instance args: tuple, additional words passed to the command """ parameters = list(args) source_conv = event.conv_id remove = set() test = False quietly = False for parameter in parameters: if parameter in bot.conversations[source_conv]["participants"]: remove.add(parameter) elif parameter in bot.conversations: source_conv = parameter elif parameter == _("test"): test = True elif parameter == _("quietly"): quietly = True else: raise commands.Help(_("supply optional conversation id and valid " "user ids to kick")) if not remove: raise commands.Help(_("supply at least one valid user id to kick")) arguments = ["refresh", source_conv, "without"] + list(remove) if test: arguments.append(_("test")) if quietly: arguments.append(_("quietly")) await commands.command.run(bot, event, *arguments)
def initialize_commands(): commands.register(Quit()) commands.register(Walk()) commands.register(Walk('north')) commands.register(Walk('east')) commands.register(Walk('south')) commands.register(Walk('west')) commands.register(RoomAdd()) commands.register(RoomAddExit()) commands.register(RoomFind()) commands.register(RoomAddEvent()) commands.register(WorldList()) commands.register(commands.Help())
def __init__(self): self.options = [] self.globalOptions = { "q": commands.QuitGame(), "i": commands.Inventory(), "f": commands.Fight(), "m": commands.Map(), "h": commands.Help(), "s": commands.Save(), "b": commands.Back() } self.content = False self.stats = False self.optionWidth = 10 self.clear = True self.name = "no-name" self.player = None
def parse(cmd): if cmd == '': return commands.Repeat() elif len(cmd) == 1 and cmd.isdigit(): rank = int(cmd) return commands.Frequent(rank) elif cmd == 'h': return commands.Human() elif cmd == 'r': return commands.Rated() elif cmd == '/': return commands.Root() elif cmd == '?': return commands.Help() elif cmd == '??': return commands.MoreHelp() elif cmd == 't': return commands.HelpTopic('t') elif cmd == 'd': return commands.HelpTopic('d') elif cmd == 'm': return commands.HelpTopic('m') elif _REGEX_UP.fullmatch(cmd): return commands.Up(len(cmd)) elif _REGEX_DAYS.fullmatch(cmd): # TODO is there a good way to avoid duplicating the .fullmatch() call? days_str = _REGEX_DAYS.fullmatch(cmd).group(1) days = int(days_str) return commands.Days(days) elif _REGEX_MONTHS.fullmatch(cmd): months_str = _REGEX_MONTHS.fullmatch(cmd).group(1) months = int(months_str) return commands.Months(months) elif _REGEX_TIME_CONTROL.fullmatch(cmd): minutes_str = _REGEX_TIME_CONTROL.fullmatch(cmd).group(1) minutes = int(minutes_str) return commands.TimeControl(minutes) else: # TODO maybe want a regex for moves? return commands.Move(cmd)
import pytest @pytest.mark.parametrize('input,expected', [ ('', commands.Repeat()), ('0', commands.Frequent(0)), ('1', commands.Frequent(1)), ('5', commands.Frequent(5)), ('9', commands.Frequent(9)), # but not multiple digits ('h', commands.Human()), ('r', commands.Rated()), ('/', commands.Root()), ('?', commands.Help()), ('??', commands.MoreHelp()), ('-', commands.Up(1)), ('--', commands.Up(2)), ('-----', commands.Up(5)), ('t', commands.HelpTopic('t')), ('2t', commands.TimeControl(2)), ('20t', commands.TimeControl(20)), ('d', commands.HelpTopic('d')), ('m', commands.HelpTopic('m')), ('3d', commands.Days(3)), ('21d', commands.Days(21)), ('7m', commands.Months(7)),
def testHelper(self): helpCommand = commands.Help() expected = 'This is the help with argument query' self.assertEqual(expected, helpCommand.execute('query'), "help msg is not the same")
# GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. from bot import Bot import commands import filters import reactions from mathCommand import Math bot = Bot("lambotirc", "card.freenode.net", 6666, "#redeclipse", commandSymbol = '!') bot.registerCommand(commands.Action()) bot.registerCommand(commands.Dice()) bot.registerCommand(commands.Help()) bot.registerCommand(commands.Hug()) bot.registerCommand(commands.Icecream()) bot.registerCommand(commands.Kick()) bot.registerCommand(commands.Pray()) bot.registerCommand(commands.Postfix()) bot.registerCommand(commands.Say()) bot.registerCommand(commands.Shrug()) bot.registerCommand(commands.Surprise()) bot.registerCommand(commands.UUID()) bot.registerCommand(Math()) bot.registerFilter(filters.REDiscord()) bot.registerReaction(reactions.Respond())
async def refresh(bot, event, *args): """recreate a conversation and remove or add certain users Args: bot: HangupsBot instance event: event.ConversationEvent instance args: tuple, additional words passed to the command """ #TODO(das7pad): refactor into smaller functions parameters = list(args) test = False quietly = False source_conv = False renameold = True list_removed = [] list_added = [] state = ["conversation"] for parameter in parameters: if parameter == _("remove") or parameter == _("without"): state.append("removeuser") elif parameter == _("add") or parameter == _("with"): state.append("adduser") elif parameter == _("conversation"): state.append("conversation") elif parameter == _("quietly"): quietly = True renameold = False elif parameter == _("test"): test = True elif parameter == _("norename"): renameold = False else: if state[-1] == "adduser": list_added.append(parameter) if parameter in list_removed: list_removed.remove(parameter) elif state[-1] == "removeuser": list_removed.append(parameter) if parameter in list_added: list_added.remove(parameter) elif state[-1] == "conversation": source_conv = parameter else: raise commands.Help("UNKNOWN STATE: {}".format(state[-1])) list_removed = list(set(list_removed)) if not source_conv: raise commands.Help("conversation id not supplied") if source_conv not in bot.conversations: raise commands.Help(_("conversation {} not found").format(source_conv)) if bot.conversations[source_conv]["type"] != "GROUP": raise commands.Help(_("conversation %s is not a GROUP") % source_conv) new_title = bot.conversations.get_name(source_conv) old_title = _("[DEFUNCT] {}".format(new_title)) text_removed_users = [] for user in bot.get_users_in_conversation(source_conv): if user.id_.chat_id not in list_removed: list_added.append(user.id_.chat_id) else: text_removed_users.append( "<i>{}</i> ({})".format(user.full_name, user.id_.chat_id)) list_added = list(set(list_added)) logger.debug("refresh: from conversation %s removed %s added %s", source_conv, len(list_removed), len(list_added)) if test: return _("<b>refresh:</b> {}\n" "<b>rename old: {}</b>\n" "<b>removed {}:</b> {}\n" "<b>added {}:</b> {}").format( source_conv, old_title if renameold else _("<em>unchanged</em>"), len(text_removed_users), ", ".join(text_removed_users) or _("<em>none</em>"), len(list_added), " ".join(list_added) or _("<em>none</em>")) if len(list_added) <= 1: return _("<b>nobody to add in the new conversation</b>") _response = await bot.create_conversation( hangups.hangouts_pb2.CreateConversationRequest( request_header=bot.get_request_header(), type=hangups.hangouts_pb2.CONVERSATION_TYPE_GROUP, client_generated_id=bot.get_client_generated_id(), invitee_id=[])) new_conversation_id = _response.conversation.conversation_id.id await bot.coro_send_message(new_conversation_id, _("<i>refreshing group...</i>\n")) await asyncio.sleep(1) await _batch_add_users(bot, new_conversation_id, list_added) await bot.coro_send_message(new_conversation_id, _("<i>all users added</i>\n")) await asyncio.sleep(1) await commands.command.run( bot, event, *["convrename", "id:" + new_conversation_id, new_title]) if renameold: await commands.command.run( bot, event, *["convrename", "id:" + source_conv, old_title]) if not quietly: await bot.coro_send_message(source_conv, _("<i>group has been obsoleted</i>")) return _("refreshed: <b><pre>{}</pre></b> " "(original id: <pre>{}</pre>).\n" "new conversation id: <b><pre>{}</pre></b>.\n" "removed {}: {}").format(new_title, source_conv, new_conversation_id, len(text_removed_users), (", ".join(text_removed_users) or _("<em>none</em>")))