
- Set `bot_handler` type to `BotHandler`. - Fix mypy issues in improperly typed variables, params and returns. Fixes part of #639
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
# See readme.md for instructions on running this code.
|
|
|
|
from typing import Dict
|
|
from zulip_bots.lib import BotHandler
|
|
|
|
class IncrementorHandler:
|
|
META = {
|
|
'name': 'Incrementor',
|
|
'description': 'Example bot to test the update_message() function.',
|
|
}
|
|
|
|
def usage(self) -> str:
|
|
return '''
|
|
This is a boilerplate bot that makes use of the
|
|
update_message function. For the first @-mention, it initially
|
|
replies with one message containing a `1`. Every time the bot
|
|
is @-mentioned, this number will be incremented in the same message.
|
|
'''
|
|
|
|
def initialize(self, bot_handler: BotHandler) -> None:
|
|
storage = bot_handler.storage
|
|
if not storage.contains('number') or not storage.contains('message_id'):
|
|
storage.put('number', 0)
|
|
storage.put('message_id', None)
|
|
|
|
def handle_message(self, message: Dict[str, str], bot_handler: BotHandler) -> None:
|
|
storage = bot_handler.storage
|
|
num = storage.get('number')
|
|
|
|
# num should already be an int, but we do `int()` to force an
|
|
# explicit type check
|
|
num = int(num) + 1
|
|
|
|
storage.put('number', num)
|
|
if storage.get('message_id') is None:
|
|
result = bot_handler.send_reply(message, str(num))
|
|
if result is not None:
|
|
storage.put('message_id', result['id'])
|
|
else:
|
|
bot_handler.update_message(dict(
|
|
message_id=storage.get('message_id'),
|
|
content=str(num)
|
|
))
|
|
|
|
|
|
handler_class = IncrementorHandler
|