#!/usr/bin/python3 import pinhook.plugin import util.tilde import importlib import subprocess from random import randint from decimal import Decimal,ROUND_DOWN,ROUND_UP notifchan = '#ju-botlog' CTR = {} @pinhook.plugin.command('&tildescore', help_text='See how many tildes you have with ju.') @pinhook.plugin.command('&ts', help_text='Alias -- &tildescore') def tildescore_plugin(msg): return pinhook.plugin.message(util.tilde.show_tildescore(msg.nick)) @pinhook.plugin.command('&jackpot', help_text='See the current jackpot.') def jackpot_plugin(msg): return pinhook.plugin.message(util.tilde.show_jackpot()) # ADMIN PLUGIN @pinhook.plugin.command('&tao', help_text='[Admin] Set the admin only mode', ops=True) def debug_plugin(msg): if msg.nick not in msg.ops: return if msg.arg: util.tilde.ADMIN_ONLY = (msg.arg.lower() == 'true' or msg.arg.lower() == 't') return pinhook.plugin.message("ADMIN_ONLY set to '{}'".format(util.tilde.ADMIN_ONLY)) # ADMIN PLUGIN @pinhook.plugin.command('&dbg', help_text='[Admin] Set the debug mode', ops=True) def debug_plugin(msg): if msg.nick not in msg.ops: return if msg.arg: util.tilde.DEBUG = (msg.arg.lower() == 'true' or msg.arg.lower() == 't') return pinhook.plugin.message("DEBUG set to '{}'".format(util.tilde.DEBUG)) # ADMIN PLUGIN @pinhook.plugin.command('&tsk', help_text='[Admin] Set the timeskip mode', ops=True) def timeskip_plugin(msg): if msg.nick not in msg.ops: return if msg.arg: util.tilde.TIMESKIP = (msg.arg.lower() == 'true' or msg.arg.lower() == 't') with open(util.tilde.TIMESKIP_FILE, "r+") as timeskipfile: timeskipfile.seek(0) timeskipfile.truncate() timeskipfile.write(str(util.tilde.TIMESKIP)) return pinhook.plugin.message("TIMESKIP set to '{}'".format(util.tilde.TIMESKIP)) # ADMIN PLUGIN @pinhook.plugin.command('&tilde_requests', help_text='[Admin] See the current requests for the jugame', ops=True) def tilde_requests_plugin(msg): if msg.nick not in msg.ops and not util.tilde.DEBUG: return return pinhook.plugin.message("Outstanding requests: {}".format(str(util.tilde.challenges)) if util.tilde.challenges else "(none)") # ADMIN PLUGIN @pinhook.plugin.command('&delete_request', help_text='[Admin] Delete your jugame request', ops=True) def delete_tilde_request_plugin(msg): if (msg.nick not in msg.ops and not util.tilde.DEBUG) and (not msg.nick in util.tilde.challenges): return del util.tilde.challenges[msg.nick] return pinhook.plugin.message("Deleted") @pinhook.plugin.command('!tilde', help_text='Alias -- &tilde') @pinhook.plugin.command('&tilde', help_text='Play the tildegame!') def tilde_plugin(msg): if util.tilde.ADMIN_ONLY and msg.nick not in msg.ops: return if msg.channel != util.tilde.GOOD_CHAN and not util.tilde.DEBUG: return pinhook.plugin.message("{} is a meanie and gets no tildes. **ju only gives out tildes in the {} channel.**".format(msg.nick, util.tilde.GOOD_CHAN)) if msg.nick not in util.tilde.challenges: challenge = util.tilde.challenge(msg.channel, msg.nick, msg.timestamp) #return pinhook.plugin.message("{} (bonus {})".format(challenge,util.tilde.challenges[msg.nick][1])) return pinhook.plugin.message(challenge) @pinhook.plugin.listener('tilde_guess') def tilde_guess_plugin(msg): if util.tilde.ADMIN_ONLY and msg.nick not in msg.ops: return if msg.nick in util.tilde.challenges and (msg.channel == util.tilde.GOOD_CHAN or util.tilde.DEBUG) and not msg.text.startswith('!'): chalres = util.tilde.challenge_response(msg.nick, msg.timestamp, msg.text) resp = pinhook.plugin.message(chalres[0]) importlib.import_module('os').system('/home/jmjl/bin/juUpdate') if chalres[1][1] != 0: msg.privmsg(notifchan, f"({chalres[1][0]}) +{chalres[1][1]}") return resp @pinhook.plugin.command('&brainwash', help_text='Alias -- &cleanwash') @pinhook.plugin.command('&cleanwash', help_text='Clean your dirty money.') def cleanwash_money(msg): if util.tilde.ADMIN_ONLY and msg.nick not in msg.ops: return if msg.channel != util.tilde.GOOD_CHAN and not util.tilde.DEBUG: return pinhook.plugin.message("{} is a meanie and gets no washed money. **ju only works in the {} channel.**".format(msg.nick, util.tilde.GOOD_CHAN)) with open(util.tilde.SCORE_FILE, "r") as scorefile: time = 0 scores = scorefile.readlines() for score in scores: name, score_on_file, timestamp = score.strip("\n").split("&^%") if name == msg.nick: time = int(timestamp.split('.')[0]) if time == 0 or time <= 1000: return pinhook.plugin.message("You must waste your time with &tilde twice.") if util.tilde.too_recent(msg.timestamp, time) and not (util.tilde.DEBUG or util.tilde.TIMESKIP): return pinhook.plugin.message("You must wait until being able to use this again.") nick = msg.nick if msg.nick in msg.ops and msg.arg: nick = msg.arg balance = Decimal(subprocess.check_output(['/home/jmjl/bin/coin','Ju','internal_balance',nick],universal_newlines=True)) subprocess.check_output(['/home/jmjl/bin/coin','Ju','add_internal_balance',nick,f'-{str(balance)}'],universal_newlines=True).strip() #new_balance=((__import__('random').randint(80,110)/100)*balance).split('.')[0] new_balance = Decimal(randint(80,110))/Decimal(100)*Decimal(balance) new_balance = new_balance.quantize(Decimal('1.'), rounding=ROUND_DOWN) #jackpot_balance=(0.10*balance).split('.')[0] jackpot_balance = (Decimal(0.10)*Decimal(balance)).quantize(Decimal('1.'), rounding=ROUND_DOWN) with open(util.tilde.JACKPOT_FILE, "r+") as jackpotfile: jackpot = int(jackpotfile.readline().strip("\n")) jackpotfile.seek(0) jackpotfile.truncate() jackpot_now = str(jackpot + jackpot_balance) jackpotfile.write(jackpot_now) message = f"Cleanwashed {balance}TCN, and given the user {new_balance}TCN and contributed {jackpot_balance}TCN to the balance, jackpot at {jackpot_now}TCN" util.tilde.admin_update_tilde(nick,amount=new_balance,time=msg.timestamp,comment=message) return pinhook.plugin.message(message)