# -*- coding: utf-8 -*- import random from docopt import Dict from irc3.plugins.command import command from irc3.utils import IrcString from . import DatabasePlugin class Rape(DatabasePlugin): @command def owe(self, mask: IrcString, target: IrcString, args: Dict): """Shows how much a nick owes %%owe [] """ nick = args.get('', mask.nick) # Fetch result from database with self.con.cursor() as cur: cur.execute(''' SELECT fines FROM users WHERE lower(nick) = lower(%s) ''', [nick]) owes = cur.fetchone() # Colorize owe amount and return string if owes and owes['fines'] > 0: fines = '4${}'.format(owes['fines']) else: fines = '3$0' # Return total owes return '{nick} owes: \x03{fines}\x03'.format(nick=nick, fines=fines) @command def rape(self, mask: IrcString, target: IrcString, args: Dict): """Rapes a nick and eventually charge for it %%rape """ nick = args.get('', mask.nick) rand = random.randint(0, 3) if rand not in (0, 1): self.bot.action(target, 'rapes {}'.format(nick)) else: fine = random.randint(1, 500) # Get reason based on rand value fined = (mask.nick, nick)[rand] reason = ('raping', 'being too lewd and getting raped')[rand] # Insert or add fine to database and return total owe with self.con.cursor() as cur: cur.execute(''' INSERT INTO users (nick, fines) VALUES (lower(%s), %s) ON CONFLICT (nick) DO UPDATE SET fines = users.fines + excluded.fines RETURNING fines ''', [fined, fine]) self.con.commit() # Print fine and total owe self.bot.action(target, 'fines {nick} \x02${fine}\x02 for {reason}. You owe: \x0304${total}\x03'.format( nick=fined, fine=fine, reason=reason, total=cur.fetchone()['fines'], ))