nxy/bot/rape.py

78 lines
2.1 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
import random
2017-08-22 13:57:57 +00:00
from docopt import Dict
from irc3.plugins.command import command
from irc3.utils import IrcString
from . import DatabasePlugin
class Rape(DatabasePlugin):
@command
2017-08-22 13:57:57 +00:00
def owe(self, mask: IrcString, target: IrcString, args: Dict):
"""Shows how much a nick owes
2017-06-29 21:57:15 +00:00
%%owe [<nick>]
"""
nick = args.get('<nick>', mask.nick)
2017-06-29 21:57:15 +00:00
# Fetch result from database
2017-06-30 12:04:50 +00:00
self.cur.execute('''
SELECT
fines
FROM
users
WHERE
lower(nick) = lower(%s)
2017-06-30 12:04:50 +00:00
''', [nick])
owes = self.cur.fetchone()
2017-06-29 21:57:15 +00:00
# Colorize owe amount and return string
2017-06-30 12:04:50 +00:00
if owes:
2017-08-22 19:20:43 +00:00
fines = '4${}'.format(owes['fines'])
2017-06-30 12:04:50 +00:00
else:
fines = '3$0'
2017-06-30 12:04:50 +00:00
# Return total owes
return '{nick} owes: \x03{fines}\x03'.format(nick=nick, fines=fines)
@command
2017-08-22 13:57:57 +00:00
def rape(self, mask: IrcString, target: IrcString, args: Dict):
"""Rapes a nick and eventually charge for it
%%rape <nick>
"""
nick = args.get('<nick>', mask.nick)
rand = random.randint(0, 3)
2017-06-30 12:04:50 +00:00
if rand not in (0, 1):
2017-08-22 19:20:43 +00:00
self.bot.action(target, 'rapes {}'.format(nick))
2017-06-30 12:04:50 +00:00
else:
fine = random.randint(1, 500)
2017-08-22 19:20:43 +00:00
# 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
self.cur.execute('''
INSERT INTO
users (nick, fines)
VALUES
(lower(%s), %s)
ON CONFLICT (nick) DO UPDATE SET
fines = users.fines + excluded.fines
RETURNING
fines
2017-08-22 19:20:43 +00:00
''', [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(
2017-08-22 19:20:43 +00:00
nick=fined,
fine=fine,
reason=reason,
total=self.cur.fetchone()['fines'],
))