Browse Source

Add support for command aliases

pull/2/head
Jérôme Deuchnord 3 years ago
parent
commit
28383daf7d
3 changed files with 23 additions and 10 deletions
  1. +2
    -1
      .gitignore
  2. +15
    -2
      _twitchbot/config.py
  3. +6
    -7
      _twitchbot/twitchbot.py

+ 2
- 1
.gitignore View File

@@ -1,2 +1,3 @@
config.json config.json
docker-compose.yml
docker-compose.yml
__pycache__

+ 15
- 2
_twitchbot/config.py View File

@@ -19,19 +19,22 @@ import json


from os import environ from os import environ
from enum import Enum from enum import Enum
from typing import Union




class Command: class Command:
name: str name: str
message: str message: str
aliases: [str]


def __init__(self, name: str, message: str):
def __init__(self, name: str, message: str, aliases: [str] = []):
self.name = name self.name = name
self.message = message self.message = message
self.aliases = aliases


@classmethod @classmethod
def from_dict(cls, params: dict): def from_dict(cls, params: dict):
return Command(params['name'], params['message'])
return Command(params['name'], params['message'], params.get('aliases', []))




class TimerStrategy(Enum): class TimerStrategy(Enum):
@@ -114,6 +117,16 @@ class Config:
Timer.from_dict(params.get('timer', {})) Timer.from_dict(params.get('timer', {}))
) )


def find_command(self, command: str) -> Union[None, Command]:
if command.startswith(self.command_prefix):
command = command[1:]

for c in self.commands:
if c.name == command or command in c.aliases:
return c

return None



def get_config(file_path: str): def get_config(file_path: str):
with open(file_path, 'r') as config_file: with open(file_path, 'r') as config_file:


+ 6
- 7
_twitchbot/twitchbot.py View File

@@ -17,7 +17,7 @@


import irc3 import irc3


from .config import get_config, TimerStrategy
from .config import TimerStrategy
from random import shuffle from random import shuffle
from datetime import datetime, timedelta from datetime import datetime, timedelta


@@ -57,12 +57,11 @@ class TwitchBot:


@irc3.event(irc3.rfc.PRIVMSG) @irc3.event(irc3.rfc.PRIVMSG)
def on_msg(self, target, mask, data, **_): def on_msg(self, target, mask, data, **_):
print(target)
for command in self.config.commands:
if ('%s ' % data.lower()).startswith('%s%s ' % (self.config.command_prefix, command.name.lower())):
print('%s: %s%s' % (mask, self.config.command_prefix, command.name))
self.bot.privmsg(target, self._parse_variables(command.message, mask))
break
command = self.config.find_command(data.lower().split(' ')[0])

if command is not None:
print('%s: %s%s' % (mask, self.config.command_prefix, command.name))
self.bot.privmsg(target, self._parse_variables(command.message, mask))


self.nb_messages_since_timer += 1 self.nb_messages_since_timer += 1
self.play_timer() self.play_timer()


Loading…
Cancel
Save