Add git, restructure

This commit is contained in:
bucket
2026-03-22 18:57:54 +01:00
parent 222d9b940d
commit 3a3c18ebc0
42 changed files with 580 additions and 81 deletions
+6
View File
@@ -0,0 +1,6 @@
class_name altshowcase extends Control
@export var name_label: Label
@export var uid_label: Label
@export var count_label: Label
@export var search_alts_button: Button
+1
View File
@@ -0,0 +1 @@
uid://2f384phq5272
+10
View File
@@ -0,0 +1,10 @@
class_name Punishment extends Resource
@export var username:String = ""
@export var uid:String = ""
@export var what_punishment:punishment_types
@export var punish_reason:String = ""
## in unix time, zero means forever
@export var punish_end:int
enum punishment_types{BAN,MUTE}
+1
View File
@@ -0,0 +1 @@
uid://cafyno407e2uq
+36
View File
@@ -0,0 +1,36 @@
class_name BanListExporter extends Node
func Export(Punishments:Array[Punishment],file:String) -> void:
var fileaccess:FileAccess = FileAccess.open(file,FileAccess.WRITE)
if !fileaccess:
push_error("!fileaccess is true")
return
var content:String = ""
content += "L!ListBegin\n"
for punishment in Punishments:
if !punishment.username:
continue
content += "NAME: " + punishment.username + "\n"
content += "UID: " + punishment.uid + "\n"
content += "PUNISHMENT: " + ("MUTE" if punishment.what_punishment ==
punishment.punishment_types.MUTE else "BAN") + "\n"
content += "REASON: " + punishment.punish_reason + "\n"
content += "END_DATE: " + str(punishment.punish_end) + "\n"
content += "L!ListEnd\n"
fileaccess.store_string(content)
func Exportv1(Punishments:Array[Punishment],file:String) -> void:
var fileaccess:FileAccess = FileAccess.open(file,FileAccess.WRITE)
if !fileaccess:
push_error("!fileaccess is true")
return
var content:String = ""
content += "L!ListBegin\n"
for punishment in Punishments:
if !punishment.username:
continue
content += "NAME: " + punishment.username + "\n"
content += "UID: " + punishment.uid + "\n"
content += "L!ListEnd\n"
fileaccess.store_string(content)
@@ -0,0 +1 @@
uid://caaljvxo8tja5
+205
View File
@@ -0,0 +1,205 @@
class_name mainNode extends Control
@export var edit_window:EditWindow
@export var punish_list_parser: PunishListParser
@export var PunishContainer:Control
@export var punish_scene:PackedScene
@export var new_punish_btn:Button
@export var file_opener:FileDialog
@export var open_btn:Button
@export var new_btn:Button
@export var save_btn:Button
@export var exporter:BanListExporter
@export var file_label:Label
@export var save_file_parser:SaveFileParser
@export var quit_confirmation:ConfirmationDialog
@export var ban_counter: Label
@export var save_label: Label
@export var plus: CPUParticles2D
@export var minus: CPUParticles2D
@export var more_btn: Button
@export var options_window: MoreOptionsWindow
var current_path:String
var unsaved:bool
func _ready() -> void:
more_btn.pressed.connect(options_window.show)
edit_window.changed.connect(update_ban_counter) # use as update
var save_file = save_file_parser.read()
quit_confirmation.canceled.connect(get_tree().quit)
quit_confirmation.confirmed.connect(save_and_exit)
get_tree().auto_accept_quit = false
get_tree().root.close_requested.connect(close_request)
set_file(save_file.get("FILE",""))
file_opener.file_selected.connect(set_file)
open_btn.pressed.connect(file_opener.show)
new_btn.pressed.connect(new_punishment)
save_btn.pressed.connect(save)
options_window.remove_dupes.connect(remove_dupes)
options_window.save_v_one.connect(savevone)
options_window.repo_edit.text = save_file.get("REPO","")
options_window.email_edit.text = save_file.get("EMAIL","")
options_window.name_edit.text = save_file.get("NAME","")
options_window.key_edit.text = save_file.get("KEY","")
options_window.use_old.button_pressed = save_file.get("USE_OLD",false)
options_window.repo_edit.text_changed.connect(unsave.unbind(1))
options_window.email_edit.text_changed.connect(unsave.unbind(1))
options_window.name_edit.text_changed.connect(unsave.unbind(1))
options_window.key_edit.text_changed.connect(unsave.unbind(1))
options_window.use_old.pressed.connect(unsave)
func unsave():
save_label.show()
unsaved = true
func savevone():
var Punishments:Array[Punishment]
for child in PunishContainer.get_children():
if child is PunishShowcase:
Punishments.append(child.punishment)
exporter.Exportv1(Punishments,current_path.rstrip(".txt")+" v1.txt")
func _process(_delta: float) -> void:
if Input.is_action_just_pressed("save"):
save()
var last_alts:int = 0
func remove_dupes():
unsaved = true
remove_loop()
update_ban_counter()
func remove_loop():
var found:bool = remove_iteration()
if found == true:
remove_loop()
func remove_iteration() -> bool:
var punishments:Array[PunishShowcase]
for child in PunishContainer.get_children():
if child is PunishShowcase:
punishments.append(child)
for punishment_keep in punishments:
for punishment_two in punishments:
# cancel if not same name
if punishment_keep == punishment_two:
continue
if punishment_keep.punishment.username != punishment_two.punishment.username:
continue
# cancel if not same uid
if punishment_keep.punishment.uid != punishment_two.punishment.uid:
continue
# if there a reason?
if punishment_keep.punishment.punish_reason == "":
punishment_keep.punishment.punish_reason = punishment_two.punishment.punish_reason
# is there a time set?
if punishment_keep.punishment.punish_end == 0:
punishment_keep.punishment.punish_end = punishment_two.punishment.punish_end
# if its a mute maybe it should be a ban
if punishment_keep.punishment.what_punishment == Punishment.punishment_types.MUTE:
punishment_keep.punishment.what_punishment = punishment_two.punishment.what_punishment
punishment_two.free()
return true
return false
func update_ban_counter():
var punishments:Array[Punishment]
for child in PunishContainer.get_children():
if child is PunishShowcase:
punishments.append(child.punishment)
var count:int = 0
var keys:Array[String]
for punishment in punishments:
if punishment.uid != "":
if !keys.has(punishment.uid):
keys.append(punishment.uid)
count += 1
else:
if !keys.has(punishment.username):
keys.append(punishment.username)
count += 1
ban_counter.text = str(punishments.size()) + " Entires :::::: " + str(count) + \
" Unique :::::: " + str(punishments.size()-count) + " Alts"
var alts = punishments.size() - count
if last_alts != alts:
if alts > last_alts:
plus.emitting = true
else:
minus.emitting = true
last_alts = alts
func save():
save_label.hide()
var Punishments:Array[Punishment]
for child in PunishContainer.get_children():
if child is PunishShowcase:
Punishments.append(child.punishment)
update_ban_counter()
save_file_parser.save(current_path)
if options_window.use_old.button_pressed:
exporter.Exportv1(Punishments,current_path)
else:
exporter.Export(Punishments,current_path)
unsaved = false
func new_punishment() -> void:
unsaved = true
save_label.show()
var child:PunishShowcase = punish_scene.instantiate()
child.punishment = Punishment.new()
PunishContainer.add_child(child)
child.update()
child.Edit.connect(edit_called)
edit_called(child,true)
update_ban_counter()
func add_punishments(file:String):
save_label.show()
var punishments = punish_list_parser.parse(file)
for punish:Punishment in punishments:
var child:PunishShowcase = punish_scene.instantiate()
child.punishment = punish
PunishContainer.add_child(child)
child.update()
child.Edit.connect(edit_called)
update_ban_counter()
func clear_children():
save_label.hide()
for child in PunishContainer.get_children():
print("kill ",child)
child.queue_free()
update_ban_counter.call_deferred()
func edit_called(on:PunishShowcase,set_time:bool = false):
save_label.show()
unsaved = true
edit_window.opened_from = on
edit_window.punishment = on.punishment if on else Punishment.new()
edit_window.update(set_time)
edit_window.show()
edit_window.grab_focus()
update_ban_counter()
func set_file(path:String):
clear_children()
print("buh")
current_path = path
file_label.text = path
add_punishments(path)
update_ban_counter.call_deferred()
func close_request():
if !unsaved:
get_tree().quit()
else:
quit_confirmation.show()
func save_and_exit():
save()
get_tree().quit()
+1
View File
@@ -0,0 +1 @@
uid://c57yqopmolu8o
+49
View File
@@ -0,0 +1,49 @@
class_name PunishListParser extends Node
func parse(file:String) -> Array[Punishment]:
if !file:
return []
var fileaccess:FileAccess = FileAccess.open(file,FileAccess.READ)
if fileaccess == null:
printerr("no access to file: fileaccess == null")
return []
var raw:String = fileaccess.get_as_text()
var lines:PackedStringArray = raw.split("\n")
var punishments:Array[Punishment]
var formatting:bool = false
for line in lines:
var splits:PackedStringArray = line.split(": ")
if line.contains(":") and !line.contains(": "):
push_error("WARNING, INCORRECT FORMATTING")
formatting = true
splits = line.split(":")
match splits[0]:
"L!ListBegin":
print("start")
"NAME":
var new_punish:Punishment = Punishment.new()
new_punish.username = splits[1]
punishments.append(new_punish)
"UID":
punishments[-1].uid = splits[1]
"PUNISHMENT":
var punish:Punishment.punishment_types = punish_text_to_enum(splits[1])
punishments[-1].what_punishment = punish
"REASON":
punishments[-1].punish_reason = splits[1]
"END_DATE":
punishments[-1].punish_end = splits[1].to_int()
"L!ListEnd":
break
if formatting:
OS.alert("This file contains incorret formatting, things might not load correctly!")
return punishments
func punish_text_to_enum(text) -> Punishment.punishment_types:
var punish:Punishment.punishment_types
match text:
"BAN":
punish = Punishment.punishment_types.BAN
"MUTE":
punish = Punishment.punishment_types.MUTE
return punish
@@ -0,0 +1 @@
uid://c5ihhdkosauvw
+27
View File
@@ -0,0 +1,27 @@
class_name SaveFileParser extends Node
@export var options_window: MoreOptionsWindow
const savloc = "user://save.dat"
func read() -> Dictionary:
var file = FileAccess.open(savloc,FileAccess.READ)
if !file:
print("no savefile found")
return {}
var Dict:Dictionary = file.get_var()
return Dict
func save(current_file:String) -> void:
var file = FileAccess.open(savloc,FileAccess.WRITE)
if !file:
push_error("cant write savefile")
return
var Dict:Dictionary[String,Variant] = {
"FILE":current_file,
"REPO":options_window.repo_edit.text,
"EMAIL":options_window.email_edit.text,
"NAME":options_window.name_edit.text,
"KEY":options_window.key_edit.text,
"USE_OLD":options_window.use_old.button_pressed,
}
file.store_var(Dict)
+1
View File
@@ -0,0 +1 @@
uid://3gmapu83dglo
+37
View File
@@ -0,0 +1,37 @@
extends Node
@export var search_bar:LineEdit
@export var punish_container:Node
@export var name_check: CheckButton
@export var uid_check: CheckButton
@export var description_check: CheckButton
func _ready() -> void:
search_bar.text_changed.connect(update.unbind(1))
name_check.toggled.connect(update.unbind(1))
uid_check.toggled.connect(update.unbind(1))
description_check.toggled.connect(update.unbind(1))
func update():
var text = search_bar.text
print("ss")
if text:
for child in punish_container.get_children():
child.hide()
var strings:PackedStringArray = text.split(";")
for child in punish_container.get_children():
if child is PunishShowcase:
var valid:bool = true
for string in strings:
if string:
var in_name:bool = (string.to_lower() in child.name_label.text.to_lower()) if name_check.button_pressed else false
var in_uid:bool = (string.to_lower() in child.uid_label.text.to_lower()) if uid_check.button_pressed else false
var in_decsciption:bool = (string.to_lower() in child.punishment.punish_reason.to_lower()) if description_check.button_pressed else false
if !in_name and !in_uid and !in_decsciption:
valid = false
if valid:
child.show()
else:
for child in punish_container.get_children():
if child is PunishShowcase:
child.show()
+1
View File
@@ -0,0 +1 @@
uid://bt5wd8qjaevk0