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): class History(Plugin):
"""Watch the history of IRC channels and try to track what users may have missed.""" """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): def start(self):
"""Set up the handlers.""" """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.connection.reactor.add_global_regex_handler(['pubmsg', 'privmsg'], self.what_missed_regex,
self.handle_what_missed, 60) self.handle_what_missed, 60)
self.channel_history = {}
self.channel_participants = {}
self.channel_leave_points = {}
super(History, self).start() super(History, self).start()
def stop(self): def stop(self):
@ -109,7 +112,8 @@ class History(Plugin):
history = self._missed_slice(where, who) history = self._missed_slice(where, who)
self._delete_channel_leave_point(where, who) self._delete_channel_leave_point(where, who)
self._send_history(who, history) 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' return 'NO MORE'
def _send_history(self, who, history): def _send_history(self, who, history):
@ -149,7 +153,7 @@ class History(Plugin):
def _remove_channel_participant(self, where, who): def _remove_channel_participant(self, where, who):
"""Remove the specified who from the where channel's participants list.""" """Remove the specified who from the where channel's participants list."""
participants = self.channel_participants.setdefault(where, set()) participants = self.channel_participants.setdefault(where, set())
participants.remove(who) participants.discard(who)
logger.debug("participants for %s: %s", where, participants) 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 # pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in
# #
appdirs==1.4.4 # via virtualenv appdirs==1.4.4
asgiref==3.2.10 # via django # via virtualenv
attrs==20.2.0 # via pytest asgiref==3.2.10
bandit==1.6.2 # via -r requirements/requirements-dev.in # via django
certifi==2020.6.20 # via requests attrs==20.2.0
chardet==3.0.4 # via requests # via pytest
click==7.1.2 # via pip-tools bandit==1.6.2
coverage==5.3 # via pytest-cov # via -r requirements/requirements-dev.in
distlib==0.3.1 # via virtualenv certifi==2020.6.20
django-adminplus==0.5 # via -r requirements/requirements.in # via requests
django-bootstrap3==14.2.0 # via -r requirements/requirements.in chardet==3.0.4
django-extensions==3.0.9 # via -r requirements/requirements.in # via requests
django-registration-redux==2.8 # via -r requirements/requirements.in click==8.0.0
django==3.1.2 # via -r requirements/requirements.in, django-bootstrap3, djangorestframework # via pip-tools
djangorestframework==3.12.1 # via -r requirements/requirements.in coverage==5.3
dlint==0.10.3 # via -r requirements/requirements-dev.in # via pytest-cov
filelock==3.0.12 # via tox, virtualenv distlib==0.3.1
flake8-blind-except==0.1.1 # via -r requirements/requirements-dev.in # via virtualenv
flake8-builtins==1.5.3 # via -r requirements/requirements-dev.in django-adminplus==0.5
flake8-docstrings==1.5.0 # via -r requirements/requirements-dev.in # via -r requirements/requirements.in
flake8-executable==2.0.4 # via -r requirements/requirements-dev.in django-bootstrap3==14.2.0
flake8-fixme==1.1.1 # via -r requirements/requirements-dev.in # via -r requirements/requirements.in
flake8-isort==4.0.0 # via -r requirements/requirements-dev.in django-extensions==3.0.9
flake8-logging-format==0.6.0 # via -r requirements/requirements-dev.in # via -r requirements/requirements.in
flake8-mutable==1.2.0 # via -r requirements/requirements-dev.in django-registration-redux==2.8
flake8==3.8.4 # via -r requirements/requirements-dev.in, dlint, flake8-builtins, flake8-docstrings, flake8-executable, flake8-isort, flake8-mutable # via -r requirements/requirements.in
gitdb==4.0.5 # via gitpython django==3.1.2
gitpython==3.1.11 # via bandit # via
idna==2.10 # via requests # -r requirements/requirements.in
importlib-metadata==1.7.0 # via django-bootstrap3, flake8, inflect, pluggy, pytest, stevedore, tox, virtualenv # django-bootstrap3
importlib-resources==3.1.1 # via jaraco.text, virtualenv # djangorestframework
inflect==4.1.0 # via jaraco.itertools djangorestframework==3.12.1
iniconfig==1.1.1 # via pytest # via -r requirements/requirements.in
irc==15.0.6 # via -r requirements/requirements.in dlint==0.10.3
isort==5.6.4 # via flake8-isort # via -r requirements/requirements-dev.in
jaraco.classes==3.1.0 # via jaraco.collections filelock==3.0.12
jaraco.collections==3.0.0 # via irc # via
jaraco.functools==3.0.1 # via irc, jaraco.text, tempora # tox
jaraco.itertools==5.0.0 # via irc # virtualenv
jaraco.logging==3.0.0 # via irc flake8-blind-except==0.1.1
jaraco.stream==3.0.0 # via irc # via -r requirements/requirements-dev.in
jaraco.text==3.2.0 # via irc, jaraco.collections flake8-builtins==1.5.3
mccabe==0.6.1 # via flake8 # via -r requirements/requirements-dev.in
more-itertools==8.5.0 # via irc, jaraco.classes, jaraco.functools, jaraco.itertools flake8-docstrings==1.5.0
oauthlib==3.1.0 # via requests-oauthlib # via -r requirements/requirements-dev.in
packaging==20.4 # via pytest, tox flake8-executable==2.0.4
parsedatetime==2.6 # via -r requirements/requirements.in # via -r requirements/requirements-dev.in
pbr==5.5.1 # via stevedore flake8-fixme==1.1.1
pip-tools==5.3.1 # via -r requirements/requirements-dev.in # via -r requirements/requirements-dev.in
pluggy==0.13.1 # via pytest, tox flake8-isort==4.0.0
ply==3.11 # via -r requirements/requirements.in # via -r requirements/requirements-dev.in
py==1.9.0 # via pytest, tox flake8-logging-format==0.6.0
pycodestyle==2.6.0 # via flake8 # via -r requirements/requirements-dev.in
pydocstyle==5.1.1 # via flake8-docstrings flake8-mutable==1.2.0
pyflakes==2.2.0 # via flake8 # via -r requirements/requirements-dev.in
pyparsing==2.4.7 # via packaging flake8==3.8.4
pytest-cov==2.10.1 # via -r requirements/requirements-dev.in # via
pytest-django==4.1.0 # via -r requirements/requirements-dev.in # -r requirements/requirements-dev.in
pytest==6.1.1 # via -r requirements/requirements-dev.in, pytest-cov, pytest-django # dlint
python-dateutil==2.8.1 # via -r requirements/requirements.in # flake8-builtins
python-gitlab==2.5.0 # via -r requirements/requirements.in # flake8-docstrings
python-mpd2==1.1.0 # via -r requirements/requirements.in # flake8-executable
pytz==2020.1 # via -r requirements/requirements.in, django, irc, tempora # flake8-isort
pyyaml==5.3.1 # via bandit # flake8-mutable
requests-oauthlib==1.3.0 # via twython gitdb==4.0.5
requests==2.24.0 # via python-gitlab, requests-oauthlib, twython # via gitpython
six==1.15.0 # via bandit, irc, jaraco.collections, jaraco.logging, jaraco.text, packaging, pip-tools, python-dateutil, tox, virtualenv gitpython==3.1.11
smmap==3.0.4 # via gitdb # via bandit
snowballstemmer==2.0.0 # via pydocstyle idna==2.10
sqlparse==0.4.1 # via django # via requests
stevedore==3.2.2 # via bandit inflect==4.1.0
tempora==4.0.0 # via irc, jaraco.logging # via jaraco.itertools
testfixtures==6.15.0 # via flake8-isort iniconfig==1.1.1
toml==0.10.1 # via pytest, tox # via pytest
tox-wheel==0.5.0 # via -r requirements/requirements-dev.in irc==15.0.6
tox==3.20.1 # via -r requirements/requirements-dev.in, tox-wheel # via -r requirements/requirements.in
twython==3.8.2 # via -r requirements/requirements.in isort==5.6.4
urllib3==1.25.11 # via requests # via flake8-isort
versioneer==0.18 # via -r requirements/requirements-dev.in jaraco.classes==3.1.0
virtualenv==20.0.35 # via tox # via jaraco.collections
wheel==0.35.1 # via tox-wheel jaraco.collections==3.0.0
zipp==3.3.2 # via importlib-metadata, importlib-resources # 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: # The following packages are considered to be unsafe in a requirements file:
# pip # pip

View File

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

View File

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