diff --git a/plugins/.admin.py.un~ b/plugins/.admin.py.un~ new file mode 100644 index 0000000..82f7b67 Binary files /dev/null and b/plugins/.admin.py.un~ differ diff --git a/plugins/.echo.py.un~ b/plugins/.echo.py.un~ new file mode 100644 index 0000000..0161f75 Binary files /dev/null and b/plugins/.echo.py.un~ differ diff --git a/plugins/.rollcall.py.un~ b/plugins/.rollcall.py.un~ new file mode 100644 index 0000000..a8b6426 Binary files /dev/null and b/plugins/.rollcall.py.un~ differ diff --git a/plugins/.rps.py.un~ b/plugins/.rps.py.un~ new file mode 100644 index 0000000..d8fe703 Binary files /dev/null and b/plugins/.rps.py.un~ differ diff --git a/plugins/.tilde.py.un~ b/plugins/.tilde.py.un~ new file mode 100755 index 0000000..74b168d Binary files /dev/null and b/plugins/.tilde.py.un~ differ diff --git a/plugins/.tilderadio.py.un~ b/plugins/.tilderadio.py.un~ new file mode 100644 index 0000000..bd7df98 Binary files /dev/null and b/plugins/.tilderadio.py.un~ differ diff --git a/plugins/.tildewait.py.un~ b/plugins/.tildewait.py.un~ new file mode 100644 index 0000000..dd3a924 Binary files /dev/null and b/plugins/.tildewait.py.un~ differ diff --git a/plugins/.utilscore.py.un~ b/plugins/.utilscore.py.un~ new file mode 100644 index 0000000..64afcae Binary files /dev/null and b/plugins/.utilscore.py.un~ differ diff --git a/plugins/.watered.py.un~ b/plugins/.watered.py.un~ new file mode 100644 index 0000000..7d8e37d Binary files /dev/null and b/plugins/.watered.py.un~ differ diff --git a/plugins/admin.py b/plugins/admin.py new file mode 100644 index 0000000..d0f7a4c --- /dev/null +++ b/plugins/admin.py @@ -0,0 +1,22 @@ +#!/usr/bin/python3 + +import pinhook.plugin +import util.tilde + +@pinhook.plugin.command('&eval', help_text='Evaluates a string in the bot', ops=True, ops_msg='This command is ops only for safety reasons') +def eval_cmd(msg): + if msg.nick in msg.ops: + try: + def r(txt): msg.privmsg(msg.channel,str(txt)) + return pinhook.plugin.message(str(eval(msg.arg))) + except Exception as e: + return pinhook.plugin.message('error {}'.format(e)) + +@pinhook.plugin.command('&exec', help_text='Executes a string in the bot', ops=True, ops_msg='This command is ops only for safety reasons') +def exec_cmd(msg): + try: + def r(txt): msg.privmsg(msg.channel,str(txt)) + exec(msg.arg) + return False #pinhook.plugin.message('executed {}'.format(msg.arg)) + except Exception as e: + return pinhook.plugin.message('error {}'.format(e)) diff --git a/plugins/echo.py b/plugins/echo.py new file mode 100644 index 0000000..e87e174 --- /dev/null +++ b/plugins/echo.py @@ -0,0 +1,24 @@ +from pinhook import plugin as p + +@p.command('&echo', ops=True, help_text='Replies the current message to the current channel/user') +def echo(msg): + if msg.nick in msg.ops: + return p.message(msg.arg) + +@p.command('&ech', ops=True, help_text='Sends a message to a channel you specify') +def echo(msg): + if msg.nick in msg.ops: + arg = msg.arg.split(' ') + chan = arg[0] + mesg = ' '.join(arg[1:]) + msg.privmsg(chan, mesg) + return p.message(f'"{mesg}" sent to {chan}') + +@p.command('&nech', ops=True, help_text='Sends a notice to a channel you specify') +def notice(msg): + if msg.nick in msg.ops: + arg = msg.arg.split(' ') + chan = arg[0] + mesg = ' '.join(arg[1:]) + msg.notice(chan, mesg) + return p.message(f'notice: "{mesg}" sent to {chan}') diff --git a/plugins/tilde.py b/plugins/tilde.py new file mode 100755 index 0000000..a9b9338 --- /dev/null +++ b/plugins/tilde.py @@ -0,0 +1,124 @@ +#!/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) diff --git a/plugins/tildewait.py b/plugins/tildewait.py new file mode 100644 index 0000000..4f5f70d --- /dev/null +++ b/plugins/tildewait.py @@ -0,0 +1,64 @@ + +#!/usr/bin/python3 +import pinhook.plugin +import util.tilde +import importlib +import subprocess + +@pinhook.plugin.command('&tw',help_text='Alias -- &tildewait') +@pinhook.plugin.command('&tildewait', help_text='See how much time you have to wait for ju\'s game') +def tilde_wait(msg): + found = False + if msg.arg: nicktouse = ''.join(msg.arg.split(' ')) + else: nicktouse = msg.nick + if util.tilde.TIMESKIP: + return pinhook.plugin.message(f"{msg.nick}: You don't have to wait, timeskip is on") + with open("/home/jmjl/dev/juju/data/tildescores.txt", "r") as scorefile: + scores = scorefile.readlines() + for score in scores: + name, score_on_file, timestamp = score.strip("\n").split("&^%") + if name == nicktouse: + usertime = timestamp + found = True + if found: + timecalc = int(float(usertime)) + 60*60*4 - int(float(importlib.import_module('time').time())) + if timecalc > 1: + return pinhook.plugin.message("{}: wait {} until playing again (talking about {})".format( + msg.nick, importlib.import_module('datetime').timedelta(seconds=timecalc), '\u200b'.join(nicktouse) + #msg.nick, timecalc, '\u200b'.join(nicktouse) + )) + else: + return pinhook.plugin.message("{}: wasted {} time, *can play* (talking about {})".format( + msg.nick, importlib.import_module('datetime').timedelta(seconds=timecalc * -1), '\u200b'.join(nicktouse)) + #msg.nick, timecalc, '\u200b'.join(nicktouse) + ) + else: + return pinhook.plugin.message("{}: User not found in db (talking about {})".format(msg.nick, '\u200b'.join(nicktouse))) + +@pinhook.plugin.command('!tw',help_text='Alias -- !tildewait') +@pinhook.plugin.command('!tildewait',help_text='See how much time you have to wait for tildebot, (obsolete)') +def tildebot_wait(msg): + found = False + if msg.arg: nicktouse = ''.join(msg.arg.split(' ')) + else: nicktouse = msg.nick + with open("/home/krowbar/Code/irc/data/tildescores.txt", "r") as scorefile: + scores = scorefile.readlines() + for score in scores: + name, score_on_file, timestamp = score.strip("\n").split("&^%") + if name == nicktouse: + usertime = timestamp + found = True + if found: + timecalc = int(float(usertime)) + 60*60 - int(float(importlib.import_module('time').time())) + if timecalc > 1: + return pinhook.plugin.message("{}: wait {} until playing again (talking about {})".format( + msg.nick, importlib.import_module('datetime').timedelta(seconds=timecalc), '\u200b'.join(nicktouse) + #msg.nick, timecalc, '\u200b'.join(nicktouse) + )) + else: + return pinhook.plugin.message("{}: wasted {} time, *can play* (talking about {})".format( + msg.nick, importlib.import_module('datetime').timedelta(seconds=timecalc * -1), '\u200b'.join(nicktouse)) + #msg.nick, timecalc, '\u200b'.join(nicktouse) + ) + else: + return pinhook.plugin.message("{}: User not found in db (talking about {})".format(msg.nick, '\u200b'.join(nicktouse))) diff --git a/plugins/utilscore.py b/plugins/utilscore.py new file mode 100644 index 0000000..f996df4 --- /dev/null +++ b/plugins/utilscore.py @@ -0,0 +1,10 @@ +#!/usr/bin/python3 + +import pinhook.plugin +import util.tilde +import subprocess + +@pinhook.plugin.command('&utilscore', ops=True, ops_msg='This command should only be used by ops', help_text='Shows how many tildecoins Util has') +def utilscore(msg): + bal = subprocess.check_output(['/home/jmjl/bin/coin','Util',f'-b{"d" if msg.arg else ""}']).decode('utf-8').split('\n')[0] + return pinhook.plugin.message(bal)