2023-06-26 15:31:30 +00:00
#!/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 )
2023-06-26 15:49:40 +00:00
percentage_return = new_balance / balance * Decimal ( 100 )
percentage_return = percentage_return . quantize ( Decimal ( ' .00 ' ) , rounding = ROUND_DOWN )
2023-06-26 15:31:30 +00:00
#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 )
2023-06-26 15:49:40 +00:00
message = f " Cleanwashed { balance } TCN, and given the user { new_balance } TCN ( { percentage_return } %) and contributed { jackpot_balance } TCN to the balance, jackpot at { jackpot_now } TCN "
2023-06-26 15:31:30 +00:00
util . tilde . admin_update_tilde ( nick , amount = new_balance , time = msg . timestamp , comment = message )
return pinhook . plugin . message ( message )