Compare commits

...

6 Commits

6 changed files with 365 additions and 126 deletions

View File

@ -12,7 +12,14 @@ logger = logging.getLogger(__name__)
class History(Plugin):
"""Watch the history of IRC channels and try to track what users may have missed."""
what_missed_regex = r'what did I miss\?$'
what_missed_regex = r'(?i)(what did I miss\?|did I miss anything\?)$'
def __init__(self, bot, connection, event):
"""Initialize some tracking stuff."""
super(History, self).__init__(bot, connection, event)
self.channel_history = {}
self.channel_participants = {}
self.channel_leave_points = {}
def start(self):
"""Set up the handlers."""
@ -25,10 +32,6 @@ class History(Plugin):
self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], self.what_missed_regex,
self.handle_what_missed, 60)
self.channel_history = {}
self.channel_participants = {}
self.channel_leave_points = {}
super(History, self).start()
def stop(self):
@ -109,7 +112,8 @@ class History(Plugin):
history = self._missed_slice(where, who)
self._delete_channel_leave_point(where, who)
self._send_history(who, history)
self.bot.reply(event, f"{len(history)} line(s) (PRIVMSGed)")
privmsged_str = " (PRIVMSGed)" if history else ""
self.bot.reply(event, f"{len(history)} line(s){privmsged_str}")
return 'NO MORE'
def _send_history(self, who, history):
@ -149,7 +153,7 @@ class History(Plugin):
def _remove_channel_participant(self, where, who):
"""Remove the specified who from the where channel's participants list."""
participants = self.channel_participants.setdefault(where, set())
participants.remove(who)
participants.discard(who)
logger.debug("participants for %s: %s", where, participants)

View File

@ -4,88 +4,221 @@
#
# pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in
#
appdirs==1.4.4 # via virtualenv
asgiref==3.2.10 # via django
attrs==20.2.0 # via pytest
bandit==1.6.2 # via -r requirements/requirements-dev.in
certifi==2020.6.20 # via requests
chardet==3.0.4 # via requests
click==7.1.2 # via pip-tools
coverage==5.3 # via pytest-cov
distlib==0.3.1 # via virtualenv
django-adminplus==0.5 # via -r requirements/requirements.in
django-bootstrap3==14.2.0 # via -r requirements/requirements.in
django-extensions==3.0.9 # via -r requirements/requirements.in
django-registration-redux==2.8 # via -r requirements/requirements.in
django==3.1.2 # via -r requirements/requirements.in, django-bootstrap3, djangorestframework
djangorestframework==3.12.1 # via -r requirements/requirements.in
dlint==0.10.3 # via -r requirements/requirements-dev.in
filelock==3.0.12 # via tox, virtualenv
flake8-blind-except==0.1.1 # via -r requirements/requirements-dev.in
flake8-builtins==1.5.3 # via -r requirements/requirements-dev.in
flake8-docstrings==1.5.0 # via -r requirements/requirements-dev.in
flake8-executable==2.0.4 # via -r requirements/requirements-dev.in
flake8-fixme==1.1.1 # via -r requirements/requirements-dev.in
flake8-isort==4.0.0 # via -r requirements/requirements-dev.in
flake8-logging-format==0.6.0 # via -r requirements/requirements-dev.in
flake8-mutable==1.2.0 # via -r requirements/requirements-dev.in
flake8==3.8.4 # via -r requirements/requirements-dev.in, dlint, flake8-builtins, flake8-docstrings, flake8-executable, flake8-isort, flake8-mutable
gitdb==4.0.5 # via gitpython
gitpython==3.1.11 # via bandit
idna==2.10 # via requests
importlib-metadata==1.7.0 # via django-bootstrap3, flake8, inflect, pluggy, pytest, stevedore, tox, virtualenv
importlib-resources==3.1.1 # via jaraco.text, virtualenv
inflect==4.1.0 # via jaraco.itertools
iniconfig==1.1.1 # via pytest
irc==15.0.6 # via -r requirements/requirements.in
isort==5.6.4 # via flake8-isort
jaraco.classes==3.1.0 # via jaraco.collections
jaraco.collections==3.0.0 # via irc
jaraco.functools==3.0.1 # via irc, jaraco.text, tempora
jaraco.itertools==5.0.0 # via irc
jaraco.logging==3.0.0 # via irc
jaraco.stream==3.0.0 # via irc
jaraco.text==3.2.0 # via irc, jaraco.collections
mccabe==0.6.1 # via flake8
more-itertools==8.5.0 # via irc, jaraco.classes, jaraco.functools, jaraco.itertools
oauthlib==3.1.0 # via requests-oauthlib
packaging==20.4 # via pytest, tox
parsedatetime==2.6 # via -r requirements/requirements.in
pbr==5.5.1 # via stevedore
pip-tools==5.3.1 # via -r requirements/requirements-dev.in
pluggy==0.13.1 # via pytest, tox
ply==3.11 # via -r requirements/requirements.in
py==1.9.0 # via pytest, tox
pycodestyle==2.6.0 # via flake8
pydocstyle==5.1.1 # via flake8-docstrings
pyflakes==2.2.0 # via flake8
pyparsing==2.4.7 # via packaging
pytest-cov==2.10.1 # via -r requirements/requirements-dev.in
pytest-django==4.1.0 # via -r requirements/requirements-dev.in
pytest==6.1.1 # via -r requirements/requirements-dev.in, pytest-cov, pytest-django
python-dateutil==2.8.1 # via -r requirements/requirements.in
python-gitlab==2.5.0 # via -r requirements/requirements.in
python-mpd2==1.1.0 # via -r requirements/requirements.in
pytz==2020.1 # via -r requirements/requirements.in, django, irc, tempora
pyyaml==5.3.1 # via bandit
requests-oauthlib==1.3.0 # via twython
requests==2.24.0 # via python-gitlab, requests-oauthlib, twython
six==1.15.0 # via bandit, irc, jaraco.collections, jaraco.logging, jaraco.text, packaging, pip-tools, python-dateutil, tox, virtualenv
smmap==3.0.4 # via gitdb
snowballstemmer==2.0.0 # via pydocstyle
sqlparse==0.4.1 # via django
stevedore==3.2.2 # via bandit
tempora==4.0.0 # via irc, jaraco.logging
testfixtures==6.15.0 # via flake8-isort
toml==0.10.1 # via pytest, tox
tox-wheel==0.5.0 # via -r requirements/requirements-dev.in
tox==3.20.1 # via -r requirements/requirements-dev.in, tox-wheel
twython==3.8.2 # via -r requirements/requirements.in
urllib3==1.25.11 # via requests
versioneer==0.18 # via -r requirements/requirements-dev.in
virtualenv==20.0.35 # via tox
wheel==0.35.1 # via tox-wheel
zipp==3.3.2 # via importlib-metadata, importlib-resources
appdirs==1.4.4
# via virtualenv
asgiref==3.2.10
# via django
attrs==20.2.0
# via pytest
bandit==1.6.2
# via -r requirements/requirements-dev.in
certifi==2020.6.20
# via requests
chardet==3.0.4
# via requests
click==8.0.0
# via pip-tools
coverage==5.3
# via pytest-cov
distlib==0.3.1
# via virtualenv
django-adminplus==0.5
# via -r requirements/requirements.in
django-bootstrap3==14.2.0
# via -r requirements/requirements.in
django-extensions==3.0.9
# via -r requirements/requirements.in
django-registration-redux==2.8
# via -r requirements/requirements.in
django==3.1.2
# via
# -r requirements/requirements.in
# django-bootstrap3
# djangorestframework
djangorestframework==3.12.1
# via -r requirements/requirements.in
dlint==0.10.3
# via -r requirements/requirements-dev.in
filelock==3.0.12
# via
# tox
# virtualenv
flake8-blind-except==0.1.1
# via -r requirements/requirements-dev.in
flake8-builtins==1.5.3
# via -r requirements/requirements-dev.in
flake8-docstrings==1.5.0
# via -r requirements/requirements-dev.in
flake8-executable==2.0.4
# via -r requirements/requirements-dev.in
flake8-fixme==1.1.1
# via -r requirements/requirements-dev.in
flake8-isort==4.0.0
# via -r requirements/requirements-dev.in
flake8-logging-format==0.6.0
# via -r requirements/requirements-dev.in
flake8-mutable==1.2.0
# via -r requirements/requirements-dev.in
flake8==3.8.4
# via
# -r requirements/requirements-dev.in
# dlint
# flake8-builtins
# flake8-docstrings
# flake8-executable
# flake8-isort
# flake8-mutable
gitdb==4.0.5
# via gitpython
gitpython==3.1.11
# via bandit
idna==2.10
# via requests
inflect==4.1.0
# via jaraco.itertools
iniconfig==1.1.1
# via pytest
irc==15.0.6
# via -r requirements/requirements.in
isort==5.6.4
# via flake8-isort
jaraco.classes==3.1.0
# via jaraco.collections
jaraco.collections==3.0.0
# via irc
jaraco.functools==3.0.1
# via
# irc
# jaraco.text
# tempora
jaraco.itertools==5.0.0
# via irc
jaraco.logging==3.0.0
# via irc
jaraco.stream==3.0.0
# via irc
jaraco.text==3.2.0
# via
# irc
# jaraco.collections
mccabe==0.6.1
# via flake8
more-itertools==8.5.0
# via
# irc
# jaraco.classes
# jaraco.functools
# jaraco.itertools
oauthlib==3.1.0
# via requests-oauthlib
packaging==20.4
# via
# pytest
# tox
parsedatetime==2.6
# via -r requirements/requirements.in
pbr==5.5.1
# via stevedore
pep517==0.10.0
# via pip-tools
pip-tools==6.1.0
# via -r requirements/requirements-dev.in
pluggy==0.13.1
# via
# pytest
# tox
ply==3.11
# via -r requirements/requirements.in
py==1.9.0
# via
# pytest
# tox
pycodestyle==2.6.0
# via flake8
pydocstyle==5.1.1
# via flake8-docstrings
pyflakes==2.2.0
# via flake8
pyparsing==2.4.7
# via packaging
pytest-cov==2.10.1
# via -r requirements/requirements-dev.in
pytest-django==4.1.0
# via -r requirements/requirements-dev.in
pytest==6.1.1
# via
# -r requirements/requirements-dev.in
# pytest-cov
# pytest-django
python-dateutil==2.8.1
# via -r requirements/requirements.in
python-gitlab==2.5.0
# via -r requirements/requirements.in
python-mpd2==1.1.0
# via -r requirements/requirements.in
pytz==2020.1
# via
# -r requirements/requirements.in
# django
# irc
# tempora
pyyaml==5.3.1
# via bandit
requests-oauthlib==1.3.0
# via twython
requests==2.24.0
# via
# python-gitlab
# requests-oauthlib
# twython
six==1.15.0
# via
# bandit
# irc
# jaraco.collections
# jaraco.logging
# jaraco.text
# packaging
# python-dateutil
# tox
# virtualenv
smmap==3.0.4
# via gitdb
snowballstemmer==2.0.0
# via pydocstyle
sqlparse==0.4.1
# via django
stevedore==3.2.2
# via bandit
tempora==4.0.0
# via
# irc
# jaraco.logging
testfixtures==6.15.0
# via flake8-isort
toml==0.10.1
# via
# pep517
# pytest
# tox
tox-wheel==0.5.0
# via -r requirements/requirements-dev.in
tox==3.20.1
# via
# -r requirements/requirements-dev.in
# tox-wheel
twython==3.8.2
# via -r requirements/requirements.in
urllib3==1.25.11
# via requests
versioneer==0.18
# via -r requirements/requirements-dev.in
virtualenv==20.0.35
# via tox
wheel==0.35.1
# via tox-wheel
zalgo-text==0.6
# via -r requirements/requirements.in
# The following packages are considered to be unsafe in a requirements file:
# pip

View File

@ -12,3 +12,4 @@ python-gitlab # client for the gitlab bot
python-mpd2 # client for mpd
pytz # timezone awareness
twython # twitter client
zalgo-text # zalgoify text

View File

@ -4,40 +4,98 @@
#
# pip-compile --output-file=requirements/requirements.txt requirements/requirements.in
#
asgiref==3.2.10 # via django
certifi==2020.6.20 # via requests
chardet==3.0.4 # via requests
django-adminplus==0.5 # via -r requirements/requirements.in
django-bootstrap3==14.2.0 # via -r requirements/requirements.in
django-extensions==3.0.9 # via -r requirements/requirements.in
django-registration-redux==2.8 # via -r requirements/requirements.in
django==3.1.2 # via -r requirements/requirements.in, django-bootstrap3, djangorestframework
djangorestframework==3.12.1 # via -r requirements/requirements.in
idna==2.10 # via requests
importlib-metadata==1.7.0 # via django-bootstrap3, inflect
importlib-resources==3.1.1 # via jaraco.text
inflect==4.1.0 # via jaraco.itertools
irc==15.0.6 # via -r requirements/requirements.in
jaraco.classes==3.1.0 # via jaraco.collections
jaraco.collections==3.0.0 # via irc
jaraco.functools==3.0.1 # via irc, jaraco.text, tempora
jaraco.itertools==5.0.0 # via irc
jaraco.logging==3.0.0 # via irc
jaraco.stream==3.0.0 # via irc
jaraco.text==3.2.0 # via irc, jaraco.collections
more-itertools==8.5.0 # via irc, jaraco.classes, jaraco.functools, jaraco.itertools
oauthlib==3.1.0 # via requests-oauthlib
parsedatetime==2.6 # via -r requirements/requirements.in
ply==3.11 # via -r requirements/requirements.in
python-dateutil==2.8.1 # via -r requirements/requirements.in
python-gitlab==2.5.0 # via -r requirements/requirements.in
python-mpd2==1.1.0 # via -r requirements/requirements.in
pytz==2020.1 # via -r requirements/requirements.in, django, irc, tempora
requests-oauthlib==1.3.0 # via twython
requests==2.24.0 # via python-gitlab, requests-oauthlib, twython
six==1.15.0 # via irc, jaraco.collections, jaraco.logging, jaraco.text, python-dateutil
sqlparse==0.4.1 # via django
tempora==4.0.0 # via irc, jaraco.logging
twython==3.8.2 # via -r requirements/requirements.in
urllib3==1.25.11 # via requests
zipp==3.3.2 # via importlib-metadata, importlib-resources
asgiref==3.2.10
# via django
certifi==2020.6.20
# via requests
chardet==3.0.4
# via requests
django-adminplus==0.5
# via -r requirements/requirements.in
django-bootstrap3==14.2.0
# via -r requirements/requirements.in
django-extensions==3.0.9
# via -r requirements/requirements.in
django-registration-redux==2.8
# via -r requirements/requirements.in
django==3.1.2
# via
# -r requirements/requirements.in
# django-bootstrap3
# djangorestframework
djangorestframework==3.12.1
# via -r requirements/requirements.in
idna==2.10
# via requests
inflect==4.1.0
# via jaraco.itertools
irc==15.0.6
# via -r requirements/requirements.in
jaraco.classes==3.1.0
# via jaraco.collections
jaraco.collections==3.0.0
# via irc
jaraco.functools==3.0.1
# via
# irc
# jaraco.text
# tempora
jaraco.itertools==5.0.0
# via irc
jaraco.logging==3.0.0
# via irc
jaraco.stream==3.0.0
# via irc
jaraco.text==3.2.0
# via
# irc
# jaraco.collections
more-itertools==8.5.0
# via
# irc
# jaraco.functools
# jaraco.itertools
oauthlib==3.1.0
# via requests-oauthlib
parsedatetime==2.6
# via -r requirements/requirements.in
ply==3.11
# via -r requirements/requirements.in
python-dateutil==2.8.1
# via -r requirements/requirements.in
python-gitlab==2.5.0
# via -r requirements/requirements.in
python-mpd2==1.1.0
# via -r requirements/requirements.in
pytz==2020.1
# via
# -r requirements/requirements.in
# django
# irc
# tempora
requests-oauthlib==1.3.0
# via twython
requests==2.24.0
# via
# python-gitlab
# requests-oauthlib
# twython
six==1.15.0
# via
# irc
# jaraco.collections
# jaraco.logging
# jaraco.text
# python-dateutil
sqlparse==0.4.1
# via django
tempora==4.0.0
# via
# irc
# jaraco.logging
twython==3.8.2
# via -r requirements/requirements.in
urllib3==1.25.11
# via requests
zalgo-text==0.6
# via -r requirements/requirements.in

1
text_manip/__init__.py Normal file
View File

@ -0,0 +1 @@
"""Various IRC plugins for messing with text."""

42
text_manip/zalgo.py Normal file
View File

@ -0,0 +1,42 @@
"""Turn text into zalgo text."""
import logging
import irc.client
from zalgo_text import zalgo
from ircbot.lib import Plugin
logger = logging.getLogger(__name__)
class Zalgo(Plugin):
"""Zalgoify text on demand."""
zalgo_regex = r'^!zalgo\s+(.*)$'
def start(self):
"""Set up the handlers."""
logger.debug("%s starting up", __name__)
self.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], self.zalgo_regex,
self.zalgofy, 0)
super(Zalgo, self).start()
def stop(self):
"""Tear down handlers."""
logger.debug("%s shutting down", __name__)
self.connection.reactor.remove_global_regex_handler(['pubmsg', 'privmsg'], self.zalgofy)
super(Zalgo, self).stop()
def zalgofy(self, connection, event, match):
"""Turn text into zalgo text."""
who = irc.client.NickMask(event.source).nick
what = match.group(1)
logger.debug("%s requested zelgo text for %s", who, what)
zalgoed = zalgo.zalgo().zalgofy(what)
self.bot.reply(event, f"{zalgoed}")
return 'NO MORE'
plugin = Zalgo