
This commit was originally from @fredfishgames, but it needed a big rebase due to use letting it sit too long. Also, we decided not to have shebangs at the top of test files.
79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
import os
|
|
import sys
|
|
import argparse
|
|
|
|
from zulip_bots.run import import_module_from_source
|
|
from zulip_bots.simple_lib import TerminalBotHandler
|
|
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
def parse_args():
|
|
description = '''
|
|
This tool allows you to test a bot using the terminal (and no Zulip server).
|
|
|
|
Examples: %(prog)s followup
|
|
'''
|
|
|
|
parser = argparse.ArgumentParser(description=description,
|
|
formatter_class=argparse.RawDescriptionHelpFormatter)
|
|
parser.add_argument('bot',
|
|
action='store',
|
|
help='the name or path an existing bot to run')
|
|
|
|
parser.add_argument('--bot-config-file', '-b',
|
|
action='store',
|
|
help='optional third party config file (e.g. ~/giphy.conf)')
|
|
|
|
args = parser.parse_args()
|
|
return args
|
|
|
|
def main():
|
|
args = parse_args()
|
|
if os.path.isfile(args.bot):
|
|
bot_path = os.path.abspath(args.bot)
|
|
bot_name = os.path.splitext(os.path.basename(bot_path))[0]
|
|
else:
|
|
bot_path = os.path.abspath(os.path.join(current_dir, 'bots', args.bot, args.bot+'.py'))
|
|
bot_name = args.bot
|
|
bot_dir = os.path.dirname(bot_path)
|
|
|
|
try:
|
|
lib_module = import_module_from_source(bot_path, bot_name)
|
|
except IOError:
|
|
print("Could not find and import bot '{}'".format(bot_name))
|
|
sys.exit(1)
|
|
|
|
try:
|
|
message_handler = lib_module.handler_class()
|
|
except AttributeError:
|
|
print("This module does not appear to have a bot handler_class specified.")
|
|
sys.exit(1)
|
|
|
|
bot_handler = TerminalBotHandler(args.bot_config_file)
|
|
if hasattr(message_handler, 'initialize') and callable(message_handler.initialize):
|
|
message_handler.initialize(bot_handler)
|
|
|
|
sender_email = 'foo_sender@zulip.com'
|
|
|
|
try:
|
|
while True:
|
|
content = input('Enter your message: ')
|
|
|
|
message = dict(
|
|
content=content,
|
|
sender_email=sender_email,
|
|
display_recipient=sender_email,
|
|
)
|
|
message_handler.handle_message(
|
|
message=message,
|
|
bot_handler=bot_handler,
|
|
)
|
|
except KeyboardInterrupt:
|
|
print("\n\nOk, if you're happy with your terminal-based testing, try it out with a Zulip server.",
|
|
"\nYou can refer to https://zulipchat.com/api/running-bots#running-a-bot.")
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|