<commit_before>#pylint: disable=F0401
from helpers import *
from time import time as now
import json

spam_filename   = "plugins/redstoner-utils.py.dir/files/damnspam.json"
inputs          = {} # format "x;y;z;World"
accepted_inputs = ["WOOD_BUTTON", "STONE_BUTTON", "LEVER"]

try:
  inputs = json.loads(open(spam_filename).read())
except Exception, e:
  error("Failed to load buttons and levers: %s" % e)


def saveInputs():
  try:
    spam_file = open(spam_filename, "w")
    spam_file.write(json.dumps(inputs))
    spam_file.close()
  except Exception, e:
    error("Failed to save damnspam: " + str(e))


def location_str(block):
  return ";".join([block.getWorld().getName(), str(block.getX()), str(block.getY()), str(block.getZ())])


def add_input(creator, block, timeout_off, timeout_on):
  global inputs
  inputs[location_str(block)] = {
    "creator"     : str(creator.getUniqueId()),
    "timeout_off" : timeout_off,
    "timeout_on"  : timeout_on,
    "last_time"   : 0
  }


@hook.command("damnspam")
def onDammnspamCommand(sender, args):
  global inputs

  plugHeader(sender, "DamnSpam")
  if len(args) in [1,2]:

    if not str(sender.getGameMode()) == "CREATIVE":
      msg(sender, "&cYou can only do this in Creative mode.")
      return True

    # /damnspam <secs>
    if len(args) == 1:
      timeout_on = args[0]
      if not timeout_on.isdigit():
        msg(sender, "&cThe timeout must be a digit.")
        return True
      else:
        timeout_on  = int(timeout_on)
        timeout_off = timeout_on
        if not 0 <= timeout_on <= 60:
          msg(sender, "&cThe timeout must be within 0-60.")
          return True

    # /damnspam <off> <on>
    elif len(args) == 2:
      timeout_on  = args[0]
      timeout_off = args[1]
      if not timeout_on.isdigit() or not timeout_off.isdigit():
        msg(sender, "&cThe timeout must be a digit.")
        return True
      else:
        timeout_on  = int(timeout_on)
        timeout_off = int(timeout_off)
        if not 0 <= timeout_on <= 60 or not 0 <= timeout_off <= 60:
          msg(sender, "&cThe timeout must be within 0-60.")
          return True

    # get the block we're looking at
    target = sender.getTargetBlock(None, 10)
    ttype  = str(target.getType())
    if ttype not in accepted_inputs:
      msg(sender, "&cPlease look at a button or lever while executing this command!")
      return True

    # add block to inputs
    add_input(sender, target, timeout_off, timeout_on)
    saveInputs()
    msg(sender, "&aSuccessfully set a timeout for this %s." % ttype.lower())
    return True

  else:
    msg(sender, "&c/damnspam <seconds> &e(Buttons/Levers)")
    msg(sender, "&c/damnspam <seconds after off> <seconds after on> &e(Levers only)")


@hook.event("block.BlockBreakEvent", "normal")
def onBreak(event):
  global inputs

  sender = event.getPlayer()
  block = event.getBlock()
  if str(block.getType()) in accepted_inputs:
    pos_str = location_str(block)
    if inputs.get(pos_str):
      plugHeader(sender, "DamnSpam")
      if sender.isSneaking():
        inputs.pop(pos_str) # remove
        saveInputs()
        msg(sender, "&eSuccessfully removed the input!")
        return True
      else:
        event.setCancelled(True)
        msg(sender, "&cYou cannot destroy this input!")
        msg(sender, "&7&lSneak&7 and break if you want to remove it.")
        return True


@hook.event("player.PlayerInteractEvent", "normal")
def onInteract(event):
  if (str(event.getAction()) == "RIGHT_CLICK_BLOCK") and not event.isCancelled():
    sender  = event.getPlayer()
    block   = event.getClickedBlock()
    btype   = str(block.getType()).lower()
    powered = (block.getData() & 0x8) == 0x8 if btype == "lever" else False # data > 7, but this is how bukkit does it
    pos_str = location_str(block)
    data    = inputs.get(pos_str)
    if data:
      checktime = data["timeout_on"] if powered else data["timeout_off"]
      if data["last_time"] + checktime > now():
        event.setCancelled(True)
        plugHeader(sender, "DamnSpam")
        msg(sender, "&cThis %s has a timeout of %ss." % (btype, checktime))
      else:
        inputs["last_time"] = int(now())<commit_msg>need more caffeine<commit_after>#pylint: disable=F0401
from helpers import *
from time import time as now
import json

spam_filename   = "plugins/redstoner-utils.py.dir/files/damnspam.json"
inputs          = {} # format "x;y;z;World"
accepted_inputs = ["WOOD_BUTTON", "STONE_BUTTON", "LEVER"]

try:
  inputs = json.loads(open(spam_filename).read())
except Exception, e:
  error("Failed to load buttons and levers: %s" % e)


def saveInputs():
  try:
    spam_file = open(spam_filename, "w")
    spam_file.write(json.dumps(inputs))
    spam_file.close()
  except Exception, e:
    error("Failed to save damnspam: " + str(e))


def location_str(block):
  return ";".join([block.getWorld().getName(), str(block.getX()), str(block.getY()), str(block.getZ())])


def add_input(creator, block, timeout_off, timeout_on):
  global inputs
  inputs[location_str(block)] = {
    "creator"     : str(creator.getUniqueId()),
    "timeout_off" : timeout_off,
    "timeout_on"  : timeout_on,
    "last_time"   : 0
  }


@hook.command("damnspam")
def onDammnspamCommand(sender, args):
  global inputs

  plugHeader(sender, "DamnSpam")
  if len(args) in [1,2]:

    if not str(sender.getGameMode()) == "CREATIVE":
      msg(sender, "&cYou can only do this in Creative mode.")
      return True

    # /damnspam <secs>
    if len(args) == 1:
      timeout_on = args[0]
      if not timeout_on.isdigit():
        msg(sender, "&cThe timeout must be a digit.")
        return True
      else:
        timeout_on  = int(timeout_on)
        timeout_off = timeout_on
        if not 0 <= timeout_on <= 60:
          msg(sender, "&cThe timeout must be within 0-60.")
          return True

    # /damnspam <off> <on>
    elif len(args) == 2:
      timeout_on  = args[0]
      timeout_off = args[1]
      if not timeout_on.isdigit() or not timeout_off.isdigit():
        msg(sender, "&cThe timeout must be a digit.")
        return True
      else:
        timeout_on  = int(timeout_on)
        timeout_off = int(timeout_off)
        if not 0 <= timeout_on <= 60 or not 0 <= timeout_off <= 60:
          msg(sender, "&cThe timeout must be within 0-60.")
          return True

    # get the block we're looking at
    target = sender.getTargetBlock(None, 10)
    ttype  = str(target.getType())
    if ttype not in accepted_inputs:
      msg(sender, "&cPlease look at a button or lever while executing this command!")
      return True

    # add block to inputs
    add_input(sender, target, timeout_off, timeout_on)
    saveInputs()
    msg(sender, "&aSuccessfully set a timeout for this %s." % ttype.lower())
    return True

  else:
    msg(sender, "&c/damnspam <seconds> &e(Buttons/Levers)")
    msg(sender, "&c/damnspam <seconds after off> <seconds after on> &e(Levers only)")


@hook.event("block.BlockBreakEvent", "normal")
def onBreak(event):
  global inputs

  sender = event.getPlayer()
  block = event.getBlock()
  if str(block.getType()) in accepted_inputs:
    pos_str = location_str(block)
    if inputs.get(pos_str):
      plugHeader(sender, "DamnSpam")
      if sender.isSneaking():
        inputs.pop(pos_str) # remove
        saveInputs()
        msg(sender, "&eSuccessfully removed the input!")
        return True
      else:
        event.setCancelled(True)
        msg(sender, "&cYou cannot destroy this input!")
        msg(sender, "&7&lSneak&7 and break if you want to remove it.")
        return True


@hook.event("player.PlayerInteractEvent", "normal")
def onInteract(event):
  if (str(event.getAction()) == "RIGHT_CLICK_BLOCK") and not event.isCancelled():
    sender  = event.getPlayer()
    block   = event.getClickedBlock()
    btype   = str(block.getType()).lower()
    powered = (block.getData() & 0x8) == 0x8 if btype == "lever" else False # data > 7, but this is how bukkit does it
    pos_str = location_str(block)
    data    = inputs.get(pos_str)
    if data:
      checktime = data["timeout_on"] if powered else data["timeout_off"]
      if data["last_time"] + checktime > now():
        event.setCancelled(True)
        plugHeader(sender, "DamnSpam")
        msg(sender, "&cThis %s has a timeout of %ss." % (btype, checktime))
      else:
        inputs[pos_str]["last_time"] = int(now())
{'fraction_non_alphanumeric': 0.13137815927515498, 'fraction_numerical': 0.008583690987124463, 'mean_word_length': 3.062469733656174, 'pattern_counts': {'":': 2, '<': 27, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2035757', 'n_tokens_mistral': 2884, 'n_tokens_neox': 2809, 'n_words': 747}