[Plugin]UniqueNotifier

Introducing Unique Notifier Plugin

Features:

Custom Notifications : Set up to ten player names whom you wish to notify when a unique monster appears nearby. Simply input their names into the designated text boxes in the gui.

Party and Guild Notifications: Choose whether you want to notify your entire party or guild when a unique monster is spotted. Toggle these options with ease using the checkboxes provided.

Example how it works:
Imgur
Enjoy

from phBot import *
import phBotChat
from time import sleep
import QtBind
from threading import Timer
import os
import json

pName = "UniqueNotifier"

gui = QtBind.init(__name__, "Unique Notifier")

players_to_notify_label = QtBind.createLabel(gui, "Players to notify:", 10, 10)

player_01_label = QtBind.createLabel(gui, "Player #01", 10, 30)
player_01_name_txtbox = QtBind.createLineEdit(gui, "", 80, 30, 120, 20)

player_02_label = QtBind.createLabel(gui, "Player #02", 10, 50)
player_02_name_txtbox = QtBind.createLineEdit(gui, "", 80, 50, 120, 20)

player_03_label = QtBind.createLabel(gui, "Player #03", 10, 70)
player_03_name_txtbox = QtBind.createLineEdit(gui, "", 80, 70, 120, 20)

player_04_label = QtBind.createLabel(gui, "Player #04", 10, 90)
player_04_name_txtbox = QtBind.createLineEdit(gui, "", 80, 90, 120, 20)

player_05_label = QtBind.createLabel(gui, "Player #05", 10, 110)
player_05_name_txtbox = QtBind.createLineEdit(gui, "", 80, 110, 120, 20)

player_06_label = QtBind.createLabel(gui, "Player #06", 10, 130)
player_06_name_txtbox = QtBind.createLineEdit(gui, "", 80, 130, 120, 20)

player_07_label = QtBind.createLabel(gui, "Player #07", 10, 150)
player_07_name_txtbox = QtBind.createLineEdit(gui, "", 80, 150, 120, 20)

player_08_label = QtBind.createLabel(gui, "Player #08", 10, 170)
player_08_name_txtbox = QtBind.createLineEdit(gui, "", 80, 170, 120, 20)

player_09_label = QtBind.createLabel(gui, "Player #09", 10, 190)
player_09_name_txtbox = QtBind.createLineEdit(gui, "", 80, 190, 120, 20)

player_10_label = QtBind.createLabel(gui, "Player #10", 10, 210)
player_10_name_txtbox = QtBind.createLineEdit(gui, "", 80, 210, 120, 20)

notify_party_checkbox = QtBind.createCheckBox(gui, "", "Notify party", 10, 235)

notify_guild_checkbox = QtBind.createCheckBox(gui, "", "Notify guild", 130, 235)

save_button = QtBind.createButton(gui, "save_settings", "Save All", 80, 255)

#for debugging purposes
#load_button = QtBind.createButton(gui, "load_settings", "Load Settings", 200, 255)

credits = QtBind.createLabel(gui, "By:Slaintrax", 660, 255)

def joined_game():
	load_settings()

def handle_event(t, data):
	if t == 0:
		global unique_name
		unique_name = data

		if QtBind.isChecked(gui, notify_party_checkbox):
			log("he_party")
			Timer(0.5,notify_party).start()

		if QtBind.isChecked(gui, notify_guild_checkbox):
			log("he_guild")
			Timer(0.5,notify_guild).start()

		if QtBind.text(gui, player_01_name_txtbox):
			log("he_01")
			Timer(0.5,notify_player01).start()

		if QtBind.text(gui, player_02_name_txtbox):
			log("he_02")
			Timer(0.5,notify_player02).start()

		if QtBind.text(gui, player_03_name_txtbox):
			log("he_03")
			Timer(0.5,notify_player03).start()

		if QtBind.text(gui, player_04_name_txtbox):
			log("he_04")
			Timer(0.5,notify_player04).start()

		if QtBind.text(gui, player_05_name_txtbox):
			log("he_05")
			Timer(0.5,notify_player05).start()

		if QtBind.text(gui, player_06_name_txtbox):
			log("he_06")
			Timer(0.5,notify_player06).start()

		if QtBind.text(gui, player_07_name_txtbox):
			log("he_07")
			Timer(0.5,notify_player07).start()

		if QtBind.text(gui, player_08_name_txtbox):
			log("he_08")
			Timer(0.5,notify_player08).start()

		if QtBind.text(gui, player_09_name_txtbox):
			log("he_09")
			Timer(0.5,notify_player09).start()

		if QtBind.text(gui, player_10_name_txtbox):
			log("he_10")
			Timer(0.5,notify_player10).start()

def notify_party():
	log("not_party")
	phBotChat.Party("Unique [ "+unique_name+" ] is next to me")

def notify_guild():
	log("not_guild")
	phBotChat.Guild("Unique [ "+unique_name+" ] is next to me")

def notify_player01():
	log("not_01")
	phBotChat.Private(QtBind.text(gui, player_01_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player02():
	log("not_02")
	phBotChat.Private(QtBind.text(gui, player_02_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player03():
	log("not_03")
	phBotChat.Private(QtBind.text(gui, player_03_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player04():
	log("not_04")
	phBotChat.Private(QtBind.text(gui, player_04_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player05():
	log("not_05")
	phBotChat.Private(QtBind.text(gui, player_05_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player06():
	log("not_06")
	phBotChat.Private(QtBind.text(gui, player_06_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player07():
	log("not_07")
	phBotChat.Private(QtBind.text(gui, player_07_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player08():
	log("not_08")
	phBotChat.Private(QtBind.text(gui, player_08_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player09():
	log("not_09")
	phBotChat.Private(QtBind.text(gui, player_09_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def notify_player10():
	log("not_10")
	phBotChat.Private(QtBind.text(gui, player_10_name_txtbox), "Unique [ "+unique_name+" ] is next to me")

def save_settings():
	if isJoined():
		if os.path.exists(getPath()):
			data = {}	
			data["player01name"] = QtBind.text(gui, player_01_name_txtbox)
			data["player02name"] = QtBind.text(gui, player_02_name_txtbox)
			data["player03name"] = QtBind.text(gui, player_03_name_txtbox)
			data["player04name"] = QtBind.text(gui, player_04_name_txtbox)
			data["player05name"] = QtBind.text(gui, player_05_name_txtbox)
			data["player06name"] = QtBind.text(gui, player_06_name_txtbox)
			data["player07name"] = QtBind.text(gui, player_07_name_txtbox)
			data["player08name"] = QtBind.text(gui, player_08_name_txtbox)
			data["player09name"] = QtBind.text(gui, player_09_name_txtbox)
			data["player10name"] = QtBind.text(gui, player_10_name_txtbox)
			data["notifyparty"] = QtBind.isChecked(gui, notify_party_checkbox)
			data["notifyguild"] = QtBind.isChecked(gui, notify_guild_checkbox)
			with open(getConfig(),"w") as f:
				f.write(json.dumps(data, indent=4, sort_keys=True))
				log("Plugin: "+pName+": All settings saved")
		else:
			os.makedirs(getPath())

			data = {}	
			data["player01name"] = QtBind.text(gui, player_01_name_txtbox)
			data["player02name"] = QtBind.text(gui, player_02_name_txtbox)
			data["player03name"] = QtBind.text(gui, player_03_name_txtbox)
			data["player04name"] = QtBind.text(gui, player_04_name_txtbox)
			data["player05name"] = QtBind.text(gui, player_05_name_txtbox)
			data["player06name"] = QtBind.text(gui, player_06_name_txtbox)
			data["player07name"] = QtBind.text(gui, player_07_name_txtbox)
			data["player08name"] = QtBind.text(gui, player_08_name_txtbox)
			data["player09name"] = QtBind.text(gui, player_09_name_txtbox)
			data["player10name"] = QtBind.text(gui, player_10_name_txtbox)
			data["notifyparty"] = QtBind.isChecked(gui, notify_party_checkbox)
			data["notifyguild"] = QtBind.isChecked(gui, notify_guild_checkbox)
			with open(getConfig(),"w") as f:
				f.write(json.dumps(data, indent=4, sort_keys=True))
				log("Plugin: "+pName+": All settings saved")

def load_settings():
	load_default_settings()
	if isJoined() and os.path.exists(getConfig()):
		data = {}
		with open(getConfig(),"r") as f:
			data = json.load(f)
		if "player01name" in data:
			QtBind.setText(gui, player_01_name_txtbox,data["player01name"])
		if "player02name" in data:
			QtBind.setText(gui, player_02_name_txtbox,data["player02name"])
		if "player03name" in data:
			QtBind.setText(gui, player_03_name_txtbox,data["player03name"])
		if "player04name" in data:
			QtBind.setText(gui, player_04_name_txtbox,data["player04name"])
		if "player05name" in data:
			QtBind.setText(gui, player_05_name_txtbox,data["player05name"])
		if "player06name" in data:
			QtBind.setText(gui, player_06_name_txtbox,data["player06name"])
		if "player07name" in data:
			QtBind.setText(gui, player_07_name_txtbox,data["player07name"])
		if "player08name" in data:
			QtBind.setText(gui, player_08_name_txtbox,data["player08name"])
		if "player09name" in data:
			QtBind.setText(gui, player_09_name_txtbox,data["player09name"])
		if "player10name" in data:
			QtBind.setText(gui, player_10_name_txtbox,data["player10name"])
		if "notifyparty" in data and data["notifyparty"]:
			QtBind.setChecked(gui,notify_party_checkbox,True)
		if "notifyguild" in data and data["notifyguild"]:
			QtBind.setChecked(gui,notify_guild_checkbox,True)

def load_default_settings():
	QtBind.setText(gui, player_01_name_txtbox,"")
	QtBind.setText(gui, player_02_name_txtbox,"")
	QtBind.setText(gui, player_03_name_txtbox,"")
	QtBind.setText(gui, player_04_name_txtbox,"")
	QtBind.setText(gui, player_05_name_txtbox,"")
	QtBind.setText(gui, player_06_name_txtbox,"")
	QtBind.setText(gui, player_07_name_txtbox,"")
	QtBind.setText(gui, player_08_name_txtbox,"")
	QtBind.setText(gui, player_09_name_txtbox,"")
	QtBind.setText(gui, player_10_name_txtbox,"")
	QtBind.setChecked(gui,notify_party_checkbox,False)
	QtBind.setChecked(gui,notify_guild_checkbox,False)

def isJoined():
	global character_data
	character_data = get_character_data()
	if not (character_data and "name" in character_data and character_data["name"]):
		character_data = None
	return character_data

# Return folder path
def getPath():
	return get_config_dir()+pName+"\\"

# Return character configs path (JSON)
def getConfig():
	return getPath()+character_data['server'] + "_" + character_data['name'] + ".json"

# Plugin loaded
log('Plugin: '+pName+' successfully loaded')

if not os.path.exists(getPath()):
	# Creating configs folder
	os.makedirs(getPath())
	log('Plugin: '+pName+' folder has been created')