Tiny lib for icq/myteam command bots
Project description
mailru_im_command_bot
mailru_im_command_bot is convenient library for generic myteam/icq bots. In fact it is a wrapper for mailru-im-bot.
It uses type annotations for help method and transforming arguments.
It is fully tested and production-ready)
Usage
You can create your bot with following code:
import logging
from mailru_im_command_bot import CommandBot, MessageEnv
logging.basicConfig(level=logging.INFO)
bot = CommandBot(
token='your_token',
help_message='this is simple hello world bot'
)
@bot.command('hello')
def hello(env: MessageEnv, name='world') -> str:
return f'hello {name}'
bot.start()
Bot will response you:
you: /hello
bot: hello world
you: /hello danila
bot: hello danila
Help message will be:
this is simple hello world bot
list of commands:
/hello
args:
name: str = world
Advanced Usage
Bot can automatically parse int, float, bool, any enum.Enum and also any type that implements mailru_im_command_bot.CustomParam protocol:
import enum
import logging
from logging import getLogger
from mailru_im_command_bot import BadArg, CommandBot, MessageEnv
logging.basicConfig(level=logging.INFO)
class Email(str):
@classmethod
def verbose_classname(cls) -> str:
return cls.__name__
@classmethod
def from_arg(cls, arg: str) -> 'Email':
if '@' not in arg:
raise BadArg(f'{arg} is invalid email')
return cls(arg)
def to_arg(self) -> str:
return str(self)
class ExampleEnum(enum.Enum):
case_one = 1
case_two = 2
bot = CommandBot(
token='tour_token',
name='your_bot_name',
version='1.0.0',
logger=getLogger(__name__),
alert_to=['your_id'],
help_message='your bot description',
)
@bot.command('example_command')
def example_command(
env: MessageEnv,
int_arg: int, # required
float_arg: float = 1.0, # optional
str_arg: str = 'test_str', # optional
enum_arg: ExampleEnum = ExampleEnum.case_one, # optional
bool_arg: bool = True, # optional
email_arg: Email = Email('ddf1998@gmail.com'), # optional
) -> str:
"""your function help message"""
...
return 'response'
bot.start()
You can also wrap existing bot:
from bot import Bot
from mailru_im_command_bot import CommandBot
from logging import getLogger
base_bot = Bot(
token='your_token_here',
name='your_bot_name',
version='your_bot_version',
)
bot = CommandBot(
from_bot=base_bot,
logger=getLogger(__name__),
alert_to=['danila.fomin@corp.mail.ru'],
help_message='your bot description',
)
Bot accepts messages like this:
/example_command 1
# you get int_arg = 1 and other arguments defaults
/example_command 1 0
# you get int_arg = 1, float_arg = 0.0 and other arguments defaults
...etc
It also can accept key-value arguments:
/example_command int_arg=1
/example_command 1 enum_arg=case_two
/example_command int_arg=1 enum_arg=case_two
Your help message will be like this:
your bot description
list of commands:
/example_command
your function help message
args:
int_arg: int
float_arg: float = 1.0
str_arg: str = test_str
enum_arg: case_one|case_two = case_one
bool_arg: True|False = True
email_arg: Email = ddf1998@gmail.com
Bot automatically writes access log with provided logger.
[ACCESS] [user_id]@[chat_id] /example_command elapsed=0.100s
If an exception occurred bot will write the error into log, send 'some exception occurred'
to user and report error to users in alert_to
list.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for mailru-im-command-bot-0.1.9.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf464825ad016c5a3d14359dea4c5acc79950b6e7e13cd041de892beb206babd |
|
MD5 | 4c879a08bdc01e1301151e591f111757 |
|
BLAKE2b-256 | c419d9403d648801839a3b6c738d14e866d5e75ff8bd0a4295865a131c3b7c8a |
Hashes for mailru_im_command_bot-0.1.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dc464a20de776fca054089e46f82c6ed9e3434bd957900fe378d5a9ff899900d |
|
MD5 | 1e19a91623bfbb36c941d450d0dbe9be |
|
BLAKE2b-256 | f3d0dbaccaaf807d4a6a8b3a3d763fa8074c9feae3b450a0c6284c692c18d6c2 |