* Added base admin login/logout flows * Ignore local database * Channel model * Admin interface for channels and plugins * Added database tests along with workflows * Added some docstrings * Ignore .coverage file * Creating plugins docs WIP * Documentation * Black everything * Some documentation * Coverage for the plugins package as well * DB Fixes * Absolute FROM in Dockerfile * Database and logging fixes * Slack: Support private channels * Added pre-commit * black'd * Fixed UserQuery.create * Fixed ChannelPluginQuery.create exists call * Added ChannelPlugin menu for debugging * Ignore sqlite databases * Updated contributing docs
51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
import random
|
|
|
|
import dice
|
|
import structlog
|
|
|
|
from butterrobot.plugins import Plugin
|
|
from butterrobot.objects import Message
|
|
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
|
|
class LoquitoPlugin(Plugin):
|
|
name = "Loquito reply"
|
|
id = "contrib.fun.loquito"
|
|
|
|
@classmethod
|
|
def on_message(cls, message, **kwargs):
|
|
if "lo quito" in message.text.lower():
|
|
yield Message(
|
|
chat=message.chat, reply_to=message.id, text="Loquito tu.",
|
|
)
|
|
|
|
|
|
class DicePlugin(Plugin):
|
|
name = "Dice command"
|
|
id = "contrib.fun.dice"
|
|
DEFAULT_FORMULA = "1d20"
|
|
|
|
@classmethod
|
|
def on_message(cls, message: Message, **kwargs):
|
|
if message.text.startswith("!dice"):
|
|
dice_formula = message.text.replace("!dice", "").strip()
|
|
if not dice_formula:
|
|
dice_formula = cls.DEFAULT_FORMULA
|
|
roll = int(dice.roll(dice_formula))
|
|
yield Message(chat=message.chat, reply_to=message.id, text=roll)
|
|
|
|
|
|
class CoinPlugin(Plugin):
|
|
name = "Coin command"
|
|
id = "contrib.fun.coin"
|
|
|
|
@classmethod
|
|
def on_message(cls, message: Message, **kwargs):
|
|
if message.text.startswith("!coin"):
|
|
yield Message(
|
|
chat=message.chat,
|
|
reply_to=message.id,
|
|
text=random.choice(("heads", "tails")),
|
|
)
|