Add CI checks
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details

This commit is contained in:
lucidiot 2021-07-24 21:29:26 +02:00
parent df2b5eb814
commit ae3cec1082
6 changed files with 54 additions and 21 deletions

View File

@ -4,8 +4,26 @@ type: docker
name: default name: default
steps: steps:
- name: lint - name: flake8
image: python:3-alpine image: python:3-alpine
depends_on:
- clone
commands: commands:
- pip install -r requirements-dev.txt - pip install -r requirements-dev.txt
- flake8 . - flake8 breadbot
- name: isort
image: python:3-alpine
depends_on:
- clone
commands:
- pip install -r requirements-dev.txt
- isort --check --diff breadbot
- name: mypy
image: python:3-alpine
depends_on:
- clone
commands:
- pip install -r requirements-dev.txt
- mypy breadbot

View File

@ -4,6 +4,9 @@ breadbot
A Python IRC bot built using the `pinhook`_ framework to encourage A Python IRC bot built using the `pinhook`_ framework to encourage
addiction to bread on breadpunk's own irc server. addiction to bread on breadpunk's own irc server.
.. image:: https://drone.tildegit.org/api/badges/breadpunk/breadbot/status.svg
:target: https://drone.tildegit.org/breadpunk/breadbot
Data files Data files
---------- ----------

View File

@ -1,22 +1,23 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import argparse import argparse
import re import re
import yaml import yaml
from irc.client import NickMask from irc.client import Event, NickMask, ServerConnection # type: ignore
from pinhook import plugin, bot from pinhook import bot, plugin # type: ignore
RELAY_REGEX = re.compile(r'^<([^@]+@(?:tilde|bread))>\s?(.*)$') RELAY_REGEX = re.compile(r'^<([^@]+@(?:tilde|bread))>\s?(.*)$')
class BreadBot(bot.Bot): class BreadBot(bot.Bot):
def on_welcome(self, c, e): def on_welcome(self, c: ServerConnection, e: Event) -> None:
c.mode(self.bot_nick, '+B') c.mode(self.bot_nick, '+B')
super().on_welcome(c, e) super().on_welcome(c, e)
for channel in self.chanlist: for channel in self.chanlist:
self.process_output(c, channel, plugin.message('bread')) self.process_output(c, channel, plugin.message('bread'))
def process_event(self, c, e): def process_event(self, c: ServerConnection, e: Event) -> None:
# Handle BreadRelay by suppressing it # Handle BreadRelay by suppressing it
if e.source.nick == 'BreadRelay' and e.arguments: if e.source.nick == 'BreadRelay' and e.arguments:
match = RELAY_REGEX.match(e.arguments[0]) match = RELAY_REGEX.match(e.arguments[0])
@ -30,12 +31,10 @@ class BreadBot(bot.Bot):
if e.source.nick == self.bot_nick: if e.source.nick == self.bot_nick:
return return
print(e.source, e.arguments)
return super().process_event(c, e) return super().process_event(c, e)
def main(): def main() -> None:
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description='Breadpunk Bread Bot', description='Breadpunk Bread Bot',
) )

View File

@ -1,8 +1,11 @@
from pinhook import plugin
from pathlib import Path
import logging import logging
import re
import random import random
import re
from pathlib import Path
from typing import Optional
from pinhook import plugin # type: ignore
from pinhook.bot import Bot # type: ignore
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -13,7 +16,7 @@ messages_file = data_path / 'bread_messages.txt'
word_regex = re.compile(r'\W') word_regex = re.compile(r'\W')
def get_that_bread(): def get_that_bread() -> str:
try: try:
bread_messages = messages_file.read_text().strip().splitlines() bread_messages = messages_file.read_text().strip().splitlines()
assert bread_messages assert bread_messages
@ -27,7 +30,7 @@ def get_that_bread():
return random.choice(bread_messages) return random.choice(bread_messages)
def increment_bread(): def increment_bread() -> None:
try: try:
count = int(count_file.read_text().strip()) count = int(count_file.read_text().strip())
except (IOError, TypeError, ValueError): except (IOError, TypeError, ValueError):
@ -39,12 +42,13 @@ def increment_bread():
@plugin.listener('bread') @plugin.listener('bread')
def bread(ctx): def bread(ctx: Bot.Message) -> Optional[plugin.Output]:
words = set(word_regex.split(ctx.text.lower())) words = set(word_regex.split(ctx.text.lower()))
if 'bread' in words: if 'bread' in words:
increment_bread() increment_bread()
if words == {'bread'}: if words == {'bread'}:
return plugin.message(get_that_bread()) return plugin.message(get_that_bread())
return None
@plugin.command( @plugin.command(
@ -53,7 +57,7 @@ def bread(ctx):
ops=True, ops=True,
ops_msg='This command is restricted to breadpunk admins.' ops_msg='This command is restricted to breadpunk admins.'
) )
def nukethebread(ctx): def nukethebread(ctx: Bot.Message) -> plugin.Output:
count_file.write_text('0') count_file.write_text('0')
return plugin.message('Bread count has been reset.') return plugin.message('Bread count has been reset.')
@ -62,7 +66,7 @@ def nukethebread(ctx):
'!breadcount', '!breadcount',
help_text='How many times did bakers say bread here?', help_text='How many times did bakers say bread here?',
) )
def breadcount(ctx): def breadcount(ctx: Bot.Message) -> plugin.Output:
try: try:
count = int(count_file.read_text().strip()) count = int(count_file.read_text().strip())
except (IOError, TypeError, ValueError): except (IOError, TypeError, ValueError):

View File

@ -1 +1,4 @@
flake8>=3.7 flake8~=3.9
isort>=5.9
mypy~=0.910
types-PyYAML~=5.4.3

View File

@ -1,5 +1,11 @@
[flake8] [flake8]
exclude = .git,__pycache__,docs,*.pyc,venv exclude=build,.cache,.eggs,.git,breadbot.egg-info,lib,bin
# Override the errors that Flake8 ignores by default to lint very hard.
# Only ignore W503, which is deprecated and conflicts with W504.
ignore=W503
[doc8] [mypy]
ignore-path=**/*.txt,*.txt,*.egg-info,docs/_build,venv,.git disallow_incomplete_defs=True
disallow_untyped_defs=True
check_untyped_defs=True
no_implicit_optional=True