first commit
This commit is contained in:
commit
adf6e1d4cd
6 changed files with 369 additions and 0 deletions
14
.editorconfig
Normal file
14
.editorconfig
Normal file
|
@ -0,0 +1,14 @@
|
|||
# http://EditorConfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
charset = utf-8
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
106
.gitignore
vendored
Normal file
106
.gitignore
vendored
Normal file
|
@ -0,0 +1,106 @@
|
|||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# celery beat schedule file
|
||||
celerybeat-schedule
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# dotenv
|
||||
.env
|
||||
|
||||
# virtualenv
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018 Adam Piontek
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
8
README.md
Normal file
8
README.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Catto
|
||||
|
||||
This is a plugin for [Errbot](http://errbot.io/) that generates random hunky beefy hero names, in the spirit of a running joke in the "[Space Mutiny](http://mst3k.wikia.com/wiki/MST3K_820_-_Space_Mutiny)" episode of [Mystery Science Theater 3000](https://www.mst3k.com/)
|
||||
|
||||
## Usage:
|
||||
- `!myhero` Generates a hero name
|
||||
|
||||
Alternately, this plugin listens for "hero" or "space mutiny" in chatrooms and responds by blurting out a hero name.
|
9
myhero.plug
Normal file
9
myhero.plug
Normal file
|
@ -0,0 +1,9 @@
|
|||
[Core]
|
||||
name = MyHero
|
||||
module = myhero
|
||||
|
||||
[Documentation]
|
||||
description = Generates hero hunky names in the spirit of MST3k's running joke in their Space Mutiny episode
|
||||
|
||||
[Python]
|
||||
version = 3
|
211
myhero.py
Normal file
211
myhero.py
Normal file
|
@ -0,0 +1,211 @@
|
|||
import re
|
||||
import random
|
||||
from errbot import BotPlugin, botcmd, re_botcmd
|
||||
|
||||
CONFIG_TEMPLATE = {
|
||||
'HERO_NAMES_GROUP_1': ['Beat',
|
||||
'Big',
|
||||
'Blast',
|
||||
'Bold',
|
||||
'Bolt',
|
||||
'Brick',
|
||||
'Buck',
|
||||
'Buff',
|
||||
'Butch',
|
||||
'Dean',
|
||||
'Crud',
|
||||
'Crunch',
|
||||
'Burt',
|
||||
'Dirk',
|
||||
'Fist',
|
||||
'Flint',
|
||||
'Fridge',
|
||||
'Gristle',
|
||||
'Grind',
|
||||
'Hack',
|
||||
'Colt',
|
||||
'Major',
|
||||
'Fury',
|
||||
'Lump',
|
||||
'Punch',
|
||||
'Duke',
|
||||
'Blaze',
|
||||
'Blade',
|
||||
'Red',
|
||||
'Punt',
|
||||
'Reef',
|
||||
'Roll',
|
||||
'Rip',
|
||||
'Grim',
|
||||
'Jab',
|
||||
'Slab',
|
||||
'Scream',
|
||||
'Coal',
|
||||
'Slate',
|
||||
'Smash',
|
||||
'Fire',
|
||||
'Smoke',
|
||||
'Flash',
|
||||
'Steel',
|
||||
'Captain',
|
||||
'Splint',
|
||||
'Stump',
|
||||
'Rage',
|
||||
'Thick',
|
||||
'Touch',
|
||||
'Trunk',
|
||||
'Whip',
|
||||
'Zap'],
|
||||
'HERO_NAMES_GROUP_2': ['Punch',
|
||||
'Large',
|
||||
'Hard',
|
||||
'Thick',
|
||||
'Big',
|
||||
'Vander',
|
||||
'Crank',
|
||||
'Plank',
|
||||
'Drink',
|
||||
'Doom',
|
||||
'Dead',
|
||||
'Pound',
|
||||
'Knuckle',
|
||||
'Bone',
|
||||
'Savage',
|
||||
'Butt',
|
||||
'Fire',
|
||||
'Razor',
|
||||
'Rock',
|
||||
'Iron',
|
||||
'Grunt',
|
||||
'Grim',
|
||||
'Mad',
|
||||
'Thorn',
|
||||
'Blow',
|
||||
'Beef',
|
||||
'Wrestle',
|
||||
'Terror',
|
||||
'Side',
|
||||
'Rubble',
|
||||
'Speed',
|
||||
'Lightning',
|
||||
'Grit',
|
||||
'Slap',
|
||||
'Blast',
|
||||
'Fizzle',
|
||||
'Scar',
|
||||
'Granite',
|
||||
'Steak',
|
||||
'Tazer',
|
||||
'Snarl',
|
||||
'Bulk',
|
||||
'Dagger',
|
||||
'Squat',
|
||||
'SaberFist',
|
||||
'Slab',
|
||||
'Lamp',
|
||||
'Cram',
|
||||
'Cannon',
|
||||
'Tussle',
|
||||
'Man',
|
||||
'Chest',
|
||||
'Gut',
|
||||
'Rumble',
|
||||
'Fury',
|
||||
'Chunk',
|
||||
'Wreck',
|
||||
'Nail',
|
||||
'Run',
|
||||
'Rust',
|
||||
'Slam',
|
||||
'Slag',
|
||||
'Thunder',
|
||||
'Hazzard'],
|
||||
'HERO_NAMES_GROUP_3': ['Beef',
|
||||
'Huge',
|
||||
'Cheese',
|
||||
'Neck',
|
||||
'Flank',
|
||||
'Meat',
|
||||
'Delt',
|
||||
'Abs',
|
||||
'Heart',
|
||||
'Chest',
|
||||
'Roar',
|
||||
'Lots',
|
||||
'Back',
|
||||
'Nail',
|
||||
'Lift',
|
||||
'Fury',
|
||||
'Meal',
|
||||
'Stalk',
|
||||
'Steak',
|
||||
'Pec',
|
||||
'Bone',
|
||||
'Stag',
|
||||
'Body',
|
||||
'Fist',
|
||||
'Broth',
|
||||
'Groin',
|
||||
'Shot',
|
||||
'Cake',
|
||||
'Iron',
|
||||
'Chunk',
|
||||
'Face',
|
||||
'Head',
|
||||
'Thrust',
|
||||
'Crunch',
|
||||
'Rock',
|
||||
'Wad',
|
||||
'Jaw',
|
||||
'Muscle',
|
||||
'Hair',
|
||||
'Knob',
|
||||
'man',
|
||||
'Fast',
|
||||
'Rod',
|
||||
'Stone',
|
||||
'Cheek',
|
||||
'Lash']
|
||||
}
|
||||
|
||||
class MyHero(BotPlugin):
|
||||
"""Generates hero hunky names in the spirit of MST3k's running joke in their Space Mutiny episode"""
|
||||
min_err_version = '3.0.0' # Optional, but recommended
|
||||
|
||||
HERO_NAMES_PREFIXES = ['Mc','von '],
|
||||
|
||||
def get_configuration_template(self):
|
||||
return CONFIG_TEMPLATE
|
||||
|
||||
def configure(self, configuration):
|
||||
if configuration is not None and configuration != {}:
|
||||
config = dict(chain(CONFIG_TEMPLATE.items(),
|
||||
configuration.items()))
|
||||
else:
|
||||
config = CONFIG_TEMPLATE
|
||||
super(MyHero, self).configure(config)
|
||||
|
||||
def get_prefix(self):
|
||||
if not (random.randrange(0, 7) == 0): return ""
|
||||
return self.HERO_NAMES_PREFIXES[(random.randrange(0, 3) == 2)]
|
||||
|
||||
def get_hero_name(self):
|
||||
# every once in a while, thrown one of these complete in-jokes
|
||||
if (random.randrange(0,100) == 50): return "Bob Johnson"
|
||||
if (random.randrange(0,250) == 50): return "Rowsdower"
|
||||
return "{n1} {p}{n2}{n3}".format(
|
||||
n1=random.choice(self.config['HERO_NAMES_GROUP_1']),
|
||||
p=self.get_prefix(),
|
||||
n2=random.choice(self.config['HERO_NAMES_GROUP_2']),
|
||||
n3=random.choice(self.config['HERO_NAMES_GROUP_3'])
|
||||
)
|
||||
|
||||
@botcmd()
|
||||
def myhero(self, msg, args):
|
||||
"""Generates a special hunky hero name for you"""
|
||||
return self.get_hero_name()
|
||||
|
||||
@re_botcmd(pattern=r"space mutiny|hero", prefixed=False, flags=re.IGNORECASE)
|
||||
def listen_for_talk_of_heroes(self, msg, match):
|
||||
"""Talk of heroes prompts a Space Hero Name..."""
|
||||
return self.get_hero_name()
|
Loading…
Reference in a new issue