async def perm_sieve(bot: CloudBot, event: Event, _hook: Hook) -> Optional[Event]: """check permissions""" allowed_permissions = _hook.permissions if allowed_permissions: allowed = False for perm in allowed_permissions: if await event.check_permission(perm): allowed = True break if not allowed: event.notice("Sorry, you are not allowed to use this command.") return None return event
async def test_irc_catch_all(self) -> None: bot = MockBot() conn = MockConn(nick="bot") event = Event( irc_command="PRIVMSG", event_type=EventType.message, channel="#foo", nick="bar", conn=conn, content=".foo bar", ) event.notice = MagicMock() plugin = MagicMock() run_hooks = [] @hook.irc_raw("*") async def coro(hook): run_hooks.append(hook) full_hook = RawHook(plugin, hook._get_hook(coro, "irc_raw")) bot.plugin_manager.catch_all_triggers.append(full_hook) await CloudBot.process(bot, event) assert sorted(run_hooks, key=id) == sorted( [ full_hook, ], key=id, )
async def test_event(self) -> None: bot = MockBot() conn = MockConn(nick="bot") event = Event( irc_command="PRIVMSG", event_type=EventType.message, channel="#foo", nick="bar", conn=conn, content=".foo bar", ) event.notice = MagicMock() plugin = MagicMock() run_hooks = [] @hook.event(EventType.message) async def coro(hook): run_hooks.append(hook) full_event_hook = EventHook(plugin, hook._get_hook(coro, "event")) for event_type in full_event_hook.types: bot.plugin_manager.event_type_hooks[event_type].append( full_event_hook) await CloudBot.process(bot, event) assert sorted(run_hooks, key=id) == sorted( [ full_event_hook, ], key=id, )
async def test_command_partial(self) -> None: bot = MockBot() conn = MockConn(nick="bot") event = Event( irc_command="PRIVMSG", event_type=EventType.message, channel="#foo", nick="bar", conn=conn, content=".foo bar", ) event.notice = MagicMock() plugin = MagicMock() run_hooks = [] @hook.command("foob", "fooc") async def coro(hook): # pragma: no cover run_hooks.append(hook) full_hook = CommandHook(plugin, hook._get_hook(coro, "command")) for cmd in full_hook.aliases: bot.plugin_manager.commands[cmd] = full_hook await CloudBot.process(bot, event) assert sorted(run_hooks, key=id) == sorted( [], key=id, ) event.notice.assert_called_once_with("Possible matches: foob or fooc")
async def test_command(self) -> None: bot = MockBot() conn = MockConn(nick="bot") event = Event( irc_command="PRIVMSG", event_type=EventType.message, channel="#foo", nick="bar", conn=conn, content=".foo bar", ) event.notice = MagicMock() plugin = MagicMock() run_hooks = [] @hook.command("foo") async def coro(hook): run_hooks.append(hook) full_hook = CommandHook(plugin, hook._get_hook(coro, "command")) for cmd in full_hook.aliases: bot.plugin_manager.commands[cmd] = full_hook await CloudBot.process(bot, event) assert sorted(run_hooks, key=id) == sorted( [ full_hook, ], key=id, )
async def test_irc_raw_block(self): bot = MockBot() conn = MockConn(nick="bot") event = Event( irc_command="PRIVMSG", event_type=EventType.message, channel="#foo", nick="bar", conn=conn, content=".foo bar", ) event.notice = MagicMock() plugin = MagicMock() run_hooks = [] @hook.irc_raw("PRIVMSG", priority=Priority.HIGH, action=Action.HALTTYPE) async def coro(hook): run_hooks.append(hook) @hook.irc_raw("PRIVMSG", priority=Priority.NORMAL) async def coro1(hook): # pragma: no cover run_hooks.append(hook) full_hook = RawHook(plugin, hook._get_hook(coro, "irc_raw")) full_hook1 = RawHook(plugin, hook._get_hook(coro1, "irc_raw")) bot.plugin_manager.raw_triggers["PRIVMSG"].append(full_hook) bot.plugin_manager.raw_triggers["PRIVMSG"].append(full_hook1) await CloudBot.process(bot, event) assert sorted(run_hooks, key=id) == sorted( [ full_hook, ], key=id, )