forked from Firepup650/FireBot
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
#!/usr/bin/python3
|
|
from os import environ as env
|
|
from dotenv import load_dotenv
|
|
import re, codecs
|
|
from typing import Optional, Any
|
|
import bare
|
|
|
|
load_dotenv()
|
|
__version__ = "v2.0.4"
|
|
npbase: str = "\[\x0303last\.fm\x03\] [A-Za-z0-9_[\]{}\\|^]{1,$MAX} (is listening|last listened) to: \x02.+ - .*\x02( \([0-9]+ plays\)( \[.*\])?)?"
|
|
su = "^(su|sudo|(su .*|sudo .*))$"
|
|
servers: dict[str, dict[str, Any]] = {
|
|
"ircnow": {
|
|
"address": "localhost",
|
|
"port": 6601,
|
|
"interval": 200,
|
|
"pass": env["ircnow_pass"],
|
|
"channels": {"#random": 0, "#dice": 0, "#offtopic": 0},
|
|
"admins": [],
|
|
"hosts": ["9pfs.repl.co"],
|
|
},
|
|
"efnet": {
|
|
"address": "irc.mzima.net",
|
|
"channels": {"#random": 0, "#dice": 0},
|
|
"admins": ["firepup"],
|
|
"hosts": [],
|
|
},
|
|
"replirc": {
|
|
"address": "localhost",
|
|
"pass": env["replirc_pass"],
|
|
"channels": {"#random": 0, "#dice": 0, "#main": 0, "#bots": 0, "#firebot": 0},
|
|
"admins": ["h|tl"],
|
|
"hosts": ["owner.firepi"],
|
|
},
|
|
"backupbox": {
|
|
"address": "172.23.11.5",
|
|
"channels": {"#default": 0},
|
|
"admins": [],
|
|
"hosts": ["172.20.171.225", "169.254.253.107"],
|
|
}
|
|
}
|
|
admin_hosts: list[str] = ["firepup.firepi", "47.221.227.180"]
|
|
ESCAPE_SEQUENCE_RE = re.compile(
|
|
r"""
|
|
( \\U........ # 8-digit hex escapes
|
|
| \\u.... # 4-digit hex escapes
|
|
| \\x.. # 2-digit hex escapes
|
|
| \\[0-7]{1,3} # Octal escapes
|
|
| \\N\{[^}]+\} # Unicode characters by name
|
|
| \\[\\'"abfnrtv] # Single-character escapes
|
|
)""",
|
|
re.UNICODE | re.VERBOSE,
|
|
)
|
|
prefix = "."
|
|
|
|
|
|
def decode_escapes(s: str) -> str:
|
|
def decode_match(match):
|
|
return codecs.decode(match.group(0), "unicode-escape")
|
|
|
|
return ESCAPE_SEQUENCE_RE.sub(decode_match, s)
|
|
|
|
|
|
def mfind(message: str, find: list, usePrefix: bool = True) -> bool:
|
|
if usePrefix:
|
|
return any(message[: len(match) + 1] == prefix + match for match in find)
|
|
else:
|
|
return any(message[: len(match)] == match for match in find)
|
|
|
|
def adminCheck(bot: bare.bot, name: str, host: Optional[str] = "nul") -> bool:
|
|
return name.lower() in servers[bot.server]["admins"] or host in admin_hosts or host in servers[bot.server]["hosts"]
|