Huge cleanup and refactoring :>
This commit is contained in:
334
bot/useless.py
Normal file
334
bot/useless.py
Normal file
@ -0,0 +1,334 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import random
|
||||
import re
|
||||
|
||||
import irc3
|
||||
from docopt import Dict
|
||||
from irc3.plugins.command import command
|
||||
from irc3.utils import IrcString
|
||||
from psycopg2 import Error
|
||||
|
||||
from . import DatabasePlugin
|
||||
from .utils import re_generator
|
||||
|
||||
|
||||
class Useless(DatabasePlugin):
|
||||
RAINBOW = (5, 7, 8, 9, 3, 10, 12, 2, 6, 13)
|
||||
WOAH = (
|
||||
'woah',
|
||||
'woah indeed',
|
||||
'woah woah woah!',
|
||||
'keep your woahs to yourself',
|
||||
)
|
||||
ISPS = (
|
||||
't-ipconnect',
|
||||
'telefonica',
|
||||
'vodafone',
|
||||
'kabel',
|
||||
'unity-media',
|
||||
)
|
||||
GENDERS = (
|
||||
'male',
|
||||
'female',
|
||||
'shemale',
|
||||
'hermaphrodite',
|
||||
)
|
||||
|
||||
@command(permission='admin', show_in_help=False)
|
||||
def kim(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Kicks Kim, most useful command.
|
||||
|
||||
%%kim
|
||||
"""
|
||||
self.bot.kick(target, 'Kim')
|
||||
|
||||
@irc3.event(r'(?i)^:(?P<mask>\S+@\S+({})\S+) JOIN :(?P<target>#\S+)$'.format('|'.join(ISPS)))
|
||||
def bounce(self, mask, target):
|
||||
nick = IrcString(mask).nick
|
||||
|
||||
if target == '#w0bm' and nick != self.bot.nick:
|
||||
self.bot.privmsg(target, '{}: Du musst bouncen!'.format(nick))
|
||||
|
||||
@irc3.event(r'(?i)^:\S+ PRIVMSG (?P<target>\S+) :.*(woah|whoa).*$')
|
||||
def woah(self, target: str):
|
||||
"""Colorize words in a sentence with rainbow colors."""
|
||||
if random.randint(0, 4) is 0:
|
||||
self.bot.privmsg(target, random.choice(self.WOAH))
|
||||
|
||||
@irc3.event(r'(?i)^:\S+ PRIVMSG (?P<target>\S+) :(?P<msg>huehuehue)$')
|
||||
def huehuehue(self, target: str, msg: str):
|
||||
"""Returns a huehuehue when someone writes it."""
|
||||
self.bot.privmsg(target, msg)
|
||||
|
||||
@irc3.event(r'(?i)^:\S+ PRIVMSG (?P<target>\S+) :re+$')
|
||||
def reeeeee(self, target: str):
|
||||
"""Returns a REEEE."""
|
||||
self.bot.privmsg(target, re_generator())
|
||||
|
||||
@irc3.event(r'(?i)^:\S+ PRIVMSG (?P<target>\S+) :same$')
|
||||
def same(self, target: str):
|
||||
"""Returns a plain same when a user writes same."""
|
||||
self.bot.privmsg(target, 'same')
|
||||
|
||||
@irc3.event(r'(?i)^:\S+ PRIVMSG (?P<target>\S+) :\[(?P<msg>.*)\]$')
|
||||
def intensifies(self, target: str, msg: str):
|
||||
"""String with brackets around will be returned with INTENSIFIES."""
|
||||
self.bot.privmsg(target, '\x02[{} INTENSIFIES]'.format(msg.upper()))
|
||||
|
||||
@command
|
||||
def kill(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Kills a user with a random message
|
||||
|
||||
%%kill [<nick>]
|
||||
"""
|
||||
self.cur.execute('''
|
||||
SELECT
|
||||
item
|
||||
FROM
|
||||
kills
|
||||
ORDER BY
|
||||
random()
|
||||
LIMIT
|
||||
1
|
||||
''')
|
||||
self.bot.action(target, self.cur.fetchone()['item'].format(
|
||||
nick=args.get('<nick>', mask.nick),
|
||||
))
|
||||
|
||||
@command
|
||||
def yiff(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Yiffs a user with a random message
|
||||
|
||||
%%yiff [<nick>]
|
||||
"""
|
||||
self.cur.execute('''
|
||||
SELECT
|
||||
item
|
||||
FROM
|
||||
yiffs
|
||||
ORDER BY
|
||||
random()
|
||||
LIMIT
|
||||
1
|
||||
''')
|
||||
self.bot.action(target, self.cur.fetchone()['item'].format(
|
||||
nick=args.get('<nick>', mask.nick),
|
||||
yiffer=mask.nick,
|
||||
))
|
||||
|
||||
@command
|
||||
def waifu(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Get waifu for a user (set with prefixing the user with =)
|
||||
|
||||
%%waifu [<nick>...]
|
||||
"""
|
||||
return self.husbando_waifu('waifu', mask, target, args)
|
||||
|
||||
@command
|
||||
def husbando(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Get husbando for a user (set with prefixing the user with =)
|
||||
|
||||
%%husbando [<nick>...]
|
||||
"""
|
||||
return self.husbando_waifu('husbando', mask, target, args)
|
||||
|
||||
@command
|
||||
def storyofpomfface(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Story of pomf face
|
||||
|
||||
%%storyofpomfface
|
||||
"""
|
||||
for face in (':O C==3', ':OC==3', ':C==3', ':C=3', ':C3', ':3'):
|
||||
self.bot.privmsg(target, face)
|
||||
|
||||
@command
|
||||
def choose(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Decides between items (separated by comma)
|
||||
|
||||
%%choose <items>...
|
||||
"""
|
||||
choice = random.choice(' '.join(args['<items>']).split(','))
|
||||
return '{}: {}'.format(mask.nick, choice.strip())
|
||||
|
||||
@command
|
||||
def jn(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Decides between yes and no (for a question).
|
||||
|
||||
%%jn <question>...
|
||||
%%jn
|
||||
"""
|
||||
choice = random.choice(['3Ja', '4Nein'])
|
||||
return '{}: \x02\x030{}'.format(mask.nick, choice)
|
||||
|
||||
@command
|
||||
def kiss(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Kisses a user
|
||||
|
||||
%%kiss [<nick>]
|
||||
"""
|
||||
return '(づ。◕‿‿◕。)\x0304。。・゜゜・。。・゜❤\x03 {} \x0304❤'.format(args.get('<nick>', mask.nick))
|
||||
|
||||
@command
|
||||
def hug(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Hugs a user
|
||||
|
||||
%%hug [<nick>]
|
||||
"""
|
||||
return '\x0304♥♡❤♡♥\x03 {} \x0304♥♡❤♡♥'.format(args.get('<nick>', mask.nick))
|
||||
|
||||
@command
|
||||
def bier(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Gives a user a beer
|
||||
|
||||
%%bier [<nick>]
|
||||
"""
|
||||
nick = args.get('<nick>', mask.nick)
|
||||
self.bot.action(target, 'schenkt ein kühles Blondes an {} aus.'.format(nick))
|
||||
|
||||
@command
|
||||
def fucken(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Kills and fucks a user
|
||||
|
||||
%%fucken [<nick>]
|
||||
"""
|
||||
nick = args.get('<nick>', mask.nick)
|
||||
self.bot.action(target, 'fuckt {0} und tötet {0} anschließend.'.format(nick, nick))
|
||||
|
||||
@command(aliases=['anhero', 'sudoku'])
|
||||
def seppuku(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Kicks a user
|
||||
|
||||
%%seppuku
|
||||
"""
|
||||
self.bot.kick(target, mask.nick, 'Sayonara bonzai-chan...')
|
||||
|
||||
@command
|
||||
def hack(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Hacks (a user)
|
||||
|
||||
%%hack [<nick>]
|
||||
"""
|
||||
nick = args.get('<nick>')
|
||||
return 'hacking{}...'.format(' %s' % nick if nick else '')
|
||||
|
||||
@command
|
||||
def gay(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Make someone gay (alias to rainbow)
|
||||
|
||||
%%gay <word>...
|
||||
"""
|
||||
return self.rainbow(mask, target, args)
|
||||
|
||||
@command
|
||||
def rainbow(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Colorize a word in rainbow colors
|
||||
|
||||
%%rainbow <word>...
|
||||
"""
|
||||
last = 0
|
||||
word = []
|
||||
for char in ' '.join(args.get('<word>')):
|
||||
if char != ' ':
|
||||
char = self._rainbow(last, char)
|
||||
last += 1
|
||||
word.append(char)
|
||||
return ''.join(word)
|
||||
|
||||
@command
|
||||
def wrainbow(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Colorize words in a sentence with rainbow colors
|
||||
|
||||
%%wrainbow <words>...
|
||||
"""
|
||||
return ' '.join([self._rainbow(i, word) for i, word in enumerate(args['<words>'])])
|
||||
|
||||
@command(aliases=['hw'])
|
||||
def halfwidth(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Turns UPPERCASE words into halfwidth characters
|
||||
|
||||
%%halfwidth <words>...
|
||||
"""
|
||||
|
||||
def replace(match):
|
||||
return ''.join(chr(0xFF20 + (ord(c) - 64)) for c in match.group(0))
|
||||
|
||||
return '\x02[HALFWIDTH]\x02 {}'.format(re.sub(r'(?:\b)[A-Z]+(?:\b)', replace, ' '.join(args['<words>'])))
|
||||
|
||||
@command
|
||||
def asshole(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Checks how much of an asshole you are
|
||||
|
||||
%%asshole [<nick>]
|
||||
"""
|
||||
nick = args.get('<nick>', mask.nick)
|
||||
|
||||
if nick.lower() == 'mrhanky':
|
||||
perc_min = 100
|
||||
elif nick.lower() == 'flummi':
|
||||
perc_min = 90
|
||||
else:
|
||||
perc_min = 0
|
||||
|
||||
asshole_perc = random.randint(perc_min, 100)
|
||||
return 'Asshole scan... {} is {}% of an asshole.'.format(nick, asshole_perc)
|
||||
|
||||
@command
|
||||
def assume(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Assumes the gender of a nick or yourself
|
||||
|
||||
%%assume [<nick>]
|
||||
"""
|
||||
nick = args.get('<nick>', mask.nick)
|
||||
gender = random.choice(self.GENDERS)
|
||||
|
||||
return 'Assuming {}\'s gender... they\'re a {}.'.format(nick, gender)
|
||||
|
||||
@command
|
||||
def spit(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Spits a user
|
||||
|
||||
%%spit [<nick>]
|
||||
"""
|
||||
nick = args.get('<nick>', mask.nick)
|
||||
self.bot.action(target, 'spits on {} like a dirty whore.'.format(nick))
|
||||
|
||||
def husbando_waifu(self, field: str, mask: IrcString, target: IrcString, args: Dict):
|
||||
nick = args.get('<nick>', mask.nick)
|
||||
if isinstance(nick, list):
|
||||
nick = ' '.join(nick)
|
||||
|
||||
if nick.startswith('='):
|
||||
nick = nick[1:]
|
||||
|
||||
try:
|
||||
self.cur.execute('''
|
||||
INSERT INTO
|
||||
users (nick, {0})
|
||||
VALUES
|
||||
(lower(%s), %s)
|
||||
ON CONFLICT (nick) DO UPDATE SET
|
||||
{0} = excluded.{0}
|
||||
'''.format(field), [mask.nick, nick])
|
||||
self.con.commit()
|
||||
|
||||
self.bot.notice(mask.nick, '{} set to: {}'.format(field.title(), nick))
|
||||
except Error as ex:
|
||||
self.log.error(ex)
|
||||
self.con.rollback()
|
||||
else:
|
||||
self.cur.execute('''
|
||||
SELECT
|
||||
{}
|
||||
FROM
|
||||
users
|
||||
WHERE
|
||||
lower(nick) = lower(%s)
|
||||
'''.format(field), [nick])
|
||||
result = self.cur.fetchone()
|
||||
|
||||
if result and result[field]:
|
||||
return '\x02[{}]\x02 {}: {}'.format(field.title(), nick, result[field])
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
def _rainbow(self, i, char):
|
||||
return '\x03{0:02d}{1}'.format(self.RAINBOW[i % len(self.RAINBOW)], char)
|
Reference in New Issue
Block a user