betterreports.sk

Created by PandaDevs

Other available versions. Ordered by newest to oldest versions:

Just so you know, we don't know the file format for every file. If it's just a bunch of random characters, it's probably a .zip or .jar.

# █▄▄ █▀▀ ▀█▀ ▀█▀ █▀▀ █▀█   █▀█ █▀▀ █▀█ █▀█ █▀█ ▀█▀ █▀
# █▄█ ██▄  █   █  ██▄ █▀▄   █▀▄ ██▄ █▀▀ █▄█ █▀▄  █  ▄█ beta 0.4

# by PandaDevs
# Fancy text generator: http://fsymbols.com/generators/tarty/

# Changelog
# v0.4
# add /deletereport
# add /vr <id> optimisations
#
# TODO:
# add more customizations
# get report by name

# requires dependecies!
# skript-yaml and skript-mirror, for now.

# note to server administrator:
# v0.4   beta is intended for servers running 1.9+ using Skript 2.4.1+. (download will be betterreports.sk)
# v0.4.1 beta is intended for servers running 1.8+ using Skript 2.2dev26. (download will be betterreports-legacy.sk) (found only on github release page)

on script load:
    send "&f█▄▄ █▀▀ ▀█▀ ▀█▀ █▀▀ █▀█   █▀█ █▀▀ █▀█ █▀█ █▀█ ▀█▀ █▀" to console
    send "&f█▄█ ██▄  █   █  ██▄ █▀▄   █▀▄ ██▄ █▀▀ █▄█ █▀▄  █  ▄█ beta 0.4 (designed for 1.9+)" to console
    send "" to console
    send "&bCreated by PandaDevs (rentedpanda)" to console
    send "" to console
    load yaml "plugins/betterreports/config.yml" as "plugins/betterreports/config.yml"
    load yaml "plugins/betterreports/reports.yml" as "plugins/betterreports/reports.yml"
    skript-yaml "plugins/betterreports/config.yml" is empty:
        send "&bBetter Reports» &cconfig.yml does not exist or is outdated, creating one now..." to console
        set skript-yaml value "cver" from "plugins/betterreports/config.yml" to 2
        set skript-yaml value "Logs.Chat" from "plugins/betterreports/config.yml" to true
        set skript-yaml value "Logs.Commands" from "plugins/betterreports/config.yml" to true
        set skript-yaml value "Permission.sendReport" from "plugins/betterreports/config.yml" to "br.send"
        set skript-yaml value "Permission.viewReport" from "plugins/betterreports/config.yml" to "br.view"
        set skript-yaml value "Permission.actReport" from "plugins/betterreports/config.yml" to "br.act"
        set skript-yaml value "Permissions.delReport" from "plugins/betterreports/config.yml" to "br.delete"
        set skript-yaml value "Permission.notifyReport" from "plugins/betterreports/config.yml" to "br.notify"
        set skript-yaml value "Messages.Prefix" from "plugins/betterreports/config.yml" to "&cReports»"
        set skript-yaml value "Messages.reportReceived" from "plugins/betterreports/config.yml" to "&aThank you for your report. Your report was saved. Please save the Report ID for your reference."
        set skript-yaml value "Messages.reportViewer" from "plugins/betterreports/config.yml" to "&fHere are the details of the report."
        set skript-yaml value "Messages.reportDeleted" from "plugins/betterreports/config.yml" to "&aThe report was successfully deleted."
        set skript-yaml value "Messages.errorType.invalidArg" from "plugins/betterreports/config.yml" to "&fThere was an error processing your request. Please try again. &4(error) &7invalid_arg"
        set skript-yaml value "Messages.errorType.invalidID" from "plugins/betterreports/config.yml" to "&fThere was an error processing your request. Please try again. &4(error) &7invalid_id"
        set skript-yaml value "Messages.errorType.noPerms" from "plugins/betterreports/config.yml" to "&cI'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is in error."
        save yaml "plugins/betterreports/config.yml"
        send "&bBetter Reports» &aconfig.yml was successfully created!" to console
    if yaml value "cver" from "plugins/betterreports/config.yml" is not 2:
        send "&bBetter Reports» &cconfig.yml is outdated, updating now..." to console
        set skript-yaml value "cver" from "plugins/betterreports/config.yml" to 2
        set skript-yaml value "Permissions.delReport" from "plugins/betterreports/config.yml" to "br.delete"
        set skript-yaml value "Messages.reportDeleted" from "plugins/betterreports/config.yml" to "&aThe report was successfully deleted."
        save yaml "plugins/betterreports/config.yml"
        send "&bBetter Reports» &aconfig.yml was successfully updated!" to console
    skript-yaml "plugins/betterreports/reports.yml" is empty:
        send "&bBetter Reports» &creports.yml does not exist or is outdated, creating one now..." to console
        set skript-yaml value "rver" from "plugins/betterreports/reports.yml" to 1
        set skript-yaml value "Reports" from "plugins/betterreports/reports.yml" to ""
        save yaml "plugins/betterreports/reports.yml"
        send "&bBetter Reports» &areports.yml was successfully created!" to console
    send "&bBetter Reports» &aconfig.yml was successfully loaded!" to console
    send "&bBetter Reports» &areports.yml was successfully loaded!" to console

function getConfig(m: string) :: string:
    return yaml value "%{_m}%" from "plugins/betterreports/config.yml"

on chat:
    if yaml value "Logs.Chat" from "plugins/betterreports/config.yml" is true:
        log "[%now formatted human-readable%] %player%: %message%" to "betterreports/globalchat.log"

on command:
    if yaml value "Logs.Commands" from "plugins/betterreports/config.yml" is true:
        log "[%now formatted human-readable%] %player% executed command %command%" to "betterreports/globalcommands.log"

command /sendreport [<offline player>] [<text>]:
    aliases: /report, /sr, /createreport, /cr
    description: Report a player for any reason.
    trigger:
        set {_sendperm} to getConfig("Permission.sendReport")
        if player has permission "%{_sendperm}%":
            set {_prefix} to getConfig("Messages.Prefix")
            if arg 1 or arg 2 is not set:
                send "%{_prefix}% &bCorrect Usage: &e/report <player> <reason>"
                send "%{_prefix}% &eReport a player for any reason."
            else:
                set {_id} to random integer between 100000000 and 999999999
                set skript-yaml value "Reports.R-%{_id}%.Status" from "plugins/betterreports/reports.yml" to "active"
                set skript-yaml value "Reports.R-%{_id}%.Timestamp" from "plugins/betterreports/reports.yml" to now formatted human-readable
                set skript-yaml value "Reports.R-%{_id}%.Player" from "plugins/betterreports/reports.yml" to "%arg 1%"
                set skript-yaml value "Reports.R-%{_id}%.UUID" from "plugins/betterreports/reports.yml" to "%uuid of arg 1%"
                set skript-yaml value "Reports.R-%{_id}%.reportedBy" from "plugins/betterreports/reports.yml" to "%player%"
                set skript-yaml value "Reports.R-%{_id}%.Reason" from "plugins/betterreports/reports.yml" to arg 2
                save yaml "plugins/betterreports/reports.yml"
                set {_reprec} to getConfig("Messages.reportReceived")
                send "%{_prefix}% %{_reprec}%"
                send "&c=================================================="
                send "&7Report ID: &fR-%{_id}%    &7Status: &factive"
                send " "
                send "&7Timestamp: &f%now formatted human-readable%"
                send "&7Player: &f%arg 1%"
                send "&7UUID: &f%uuid of arg 1%"
                send "&7Reported by: &f%player%"
                send "&7Reason: &f%arg 2%"
                send "&c=================================================="
                loop all players:
                    set {_notifyperm} to getConfig("Permission.notifyReport")
                    if loop-player has permission "%{_notifyperm}%":
                        send formatted "%{_prefix}% &fA report has been submitted. <tooltip:View R-%{_id}%><run command:/viewreport R-%{_id}%>&bClick here<reset> &fto view the details." to loop-player
        else:
            set {_msg} to getConfig("Messages.errorType.noPerms")
            send "%{_msg}%" to player

#thank you AsuDev for this snippet here!

function checkForSpecifiedPage(slot: number, guiSize: number, list: objects) :: boolean:
    set {_counter} and {_format} to 0
    loop {_list::*}:
        if {_counter}+1 is between {_slot} and {_slot}+({_guiSize}-1):
            add 1 to {_format}
        add 1 to {_counter}
    if {_format} is 0:
        return false
    else:
        return true

command /viewreport [<string>] [<integer>]:
    aliases: /vr
    description: View player reports by ID.
    trigger:
        set {_viewperm} to getConfig("Permission.sendReport")
        if player has permission "%{_viewperm}%":
            set {_prefix} to getConfig("Messages.Prefix")
            if arg 1 is not set:
                send "%{_prefix}% &bCorrect Usage: &e/viewreport <id>"
                send "%{_prefix}% &eView player reports by ID."
            else:
                if arg 1 is "global":
                    if sender is console:
                        send "&cThis feature is intended for in-game usage only. Please access the local file instead."
                    else:
                        if arg 2 is not set:
                            make player execute command "/vr global 1"
                            stop
                        else:
                            loop node keys "Reports" from "plugins/betterreports/reports.yml":
                                add loop-value to {_global::*}

                            #thank you AsuDev for this snippet here! (paginated GUIs)

                            set {_msg2} to getConfig("Messages.errorType.invalidArg")
                            if arg 2 is less than or equal to 0:
                                send "%{_msg2}%"
                                send "&7acceptable parameters: positive nonzero integer"
                                stop
                            set {_guiSize} to 36
                            set {_slot} to ((arg 2 * {_guiSize}) + 1) - {_guiSize}
                            if checkForSpecifiedPage({_slot}, {_guiSize}, {_global::*}) is false:
                                close player's inventory
                                set {_availablePages} to ceil(size of {_global::*}/{_guiSize})
                                send "%{_msg2}%"
                                send "&7available pages: &b%{_availablePages}%"
                                stop
                            set {_rows} to ({_guiSize}/9)+2
                            # open chest inventory with {_rows} rows named "&4Global Reports - Page %arg 2%" to player - legacy
                            set metadata tag "globalReports" of player to chest inventory with {_rows} rows named "&4Global Reports - Page %arg 2%"
                            loop numbers from 36 to 44:
                                set slot loop-number of metadata tag "globalReports" of player to black stained glass pane named "&f "
                            set slot {_guiSize}+12 of metadata tag "globalReports" of player to ("MHF_ArrowLeft" parsed as offline player)'s skull named "&c&l<- PREVIOUS PAGE&r"
                            set slot {_guiSize}+13 of metadata tag "globalReports" of player to red stained clay named "&7Cancel"
                            set slot {_guiSize}+14 of metadata tag "globalReports" of player to ("MHF_ArrowRight" parsed as offline player)'s skull named "&a&lNEXT PAGE ->&r"
                            set {_counter} and {_format} to 0
                            loop {_global::*}:
                                if {_counter}+1 is between {_slot} and {_slot}+({_guiSize}-1):
                                    set {_status} to yaml value "Reports.%loop-value%.Status" from "plugins/betterreports/reports.yml"
                                    set {_timestamp} to yaml value "Reports.%loop-value%.Timestamp" from "plugins/betterreports/reports.yml"
                                    set {_player} to yaml value "Reports.%loop-value%.Player" from "plugins/betterreports/reports.yml"
                                    set {_reportedby} to yaml value "Reports.%loop-value%.reportedBy" from "plugins/betterreports/reports.yml"
                                    set {_reason} to yaml value "Reports.%loop-value%.Reason" from "plugins/betterreports/reports.yml"
                                    if {_status} is "active":
                                        set {_status} to "&aactive"
                                    else if {_status} is "flagged":
                                        set {_status} to "&cflagged"
                                    else:
                                        set {_status} to "&f%{_status}%"
                                    set {_lore::*} to "&7Status: %{_status}%" and "&7 " and "&7Timestamp: &f%{_timestamp}%" and "&7Player: &f%{_player}%" and "&7Reported by: &f%{_reportedBy}%" and "&7Reason: &f%{_reason}%" and "&7 " and "&bLeft-click to view report." and "&eRight-click to act on report." 
                                    set slot {_format} of metadata tag "globalReports" of player to paper named "%loop-value%" with lore {_lore::*}
                                    add 1 to {_format}
                                add 1 to {_counter}
                            open (metadata tag "globalReports" of player) to player
                else:
                    if yaml path "Reports.%arg 1%" from "plugins/betterreports/reports.yml" exists:
                        set {_status} to yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml"
                        set {_timestamp} to yaml value "Reports.%arg 1%.Timestamp" from "plugins/betterreports/reports.yml"
                        set {_player} to yaml value "Reports.%arg 1%.Player" from "plugins/betterreports/reports.yml"
                        set {_uuid} to yaml value "Reports.%arg 1%.UUID" from "plugins/betterreports/reports.yml"
                        set {_reportedby} to yaml value "Reports.%arg 1%.reportedBy" from "plugins/betterreports/reports.yml"
                        set {_reason} to yaml value "Reports.%arg 1%.Reason" from "plugins/betterreports/reports.yml"
                        set {_actionby} to yaml value "Reports.%arg 1%.actionTakenBy" from "plugins/betterreports/reports.yml"
                        set {_action} to yaml value "Reports.%arg 1%.Action" from "plugins/betterreports/reports.yml"
                        set {_lastaction} to yaml value "Reports.%arg 1%.lastActionDate" from "plugins/betterreports/reports.yml"
                        send "%{_prefix}% &fViewing report:"
                        send "&c=================================================="
                        send "&7Report ID: &f%arg 1%    &7Status: &f%{_status}%"
                        send " "
                        send "&7Timestamp: &f%{_timestamp}%"
                        send "&7Player: &f%{_player}%"
                        send "&7UUID: &f%{_uuid}%"
                        send "&7Reported by: &f%{_reportedby}%"
                        send "&7Reason: &f%{_reason}%"
                        send " "
                        send "&7Action taken by: &f%{_actionby}%"
                        send "&7Action: &f%{_action}%"
                        send "&7Last action timestamp: &f%{_lastaction}%"
                        send "&c=================================================="
                        set {_actperm} to getConfig("Permission.actReport")
                        if player has permission "%{_actperm}%":
                            send " "
                            send formatted "%{_prefix}% <run command:/ar %arg 1%>&bClick here<reset> &fto act on the report."
                    else:
                        set {_msg2} to getConfig("Messages.errorType.invalidArg")
                        send "%{_msg2}%" to player
        else:
            set {_msg} to getConfig("Messages.errorType.noPerms")
            send "%{_msg}%" to player

on inventory click:
    event-inventory = (metadata tag "globalReports" of player)
    cancel event
    if name of clicked item is "&a&lNEXT PAGE ->&r" or "&c&l<- PREVIOUS PAGE&r":
        cancel event
        set {_getCurrentPage} to event.getView().getTitle()
        replace all "&4Global Reports - Page " with "" in {_getCurrentPage}
        set {_getCurrentPage} to {_getCurrentPage} parsed as integer
        if name of clicked item is "&a&lNEXT PAGE ->&r":
            add 1 to {_getCurrentPage}
        else:
            remove 1 from {_getCurrentPage}
        if {_getCurrentPage} is 0:
            close player's inventory
            send "&cNo more pages to see!"
            stop
        make player execute command "/viewreport global %{_getCurrentPage}%"
    if clicked slot < 36:
        if clicked item is paper:
            set {_getid} to name of event-slot
            if click type is left mouse button:
                execute player command "/viewreport %{_getid}%"
                close player's inventory
            if click type is right mouse button:
                close player's inventory
                execute player command "/actreport %{_getid}%"
    if event-slot is black stained glass pane:
        cancel event
    if event-slot is red stained clay:
        cancel event
        close player's inventory

command /actreport [<string>] [<text>]:
    aliases: /ar
    description: Act on a player report. (staff)
    trigger:
        set {_actperm} to getConfig("Permission.actReport")
        if player has permission "%{_actperm}%":
            set {_prefix} to getConfig("Messages.Prefix")
            if arg 1 is not set:
                send "%{_prefix}% &bCorrect Usage: &e/viewreport <id> [<action>]"
                send "%{_prefix}% &eAct on a player report. (staff)"
                send " "
                send "%{_prefix}% &bList of actions"
                send "&factive (!ac), pending review (!pr), insufficent evidence (!ie), to punish (!pu), &fflag for inappropriate report (!fl), closed - other reasons (!cl)"
            else if arg 2 is not set:
                # open chest inventory with 3 rows named "Select an action: %arg 1%" to player - legacy
                set metadata tag "actReport" of player to chest inventory with 3 rows named "Select an action: %arg 1%"
                set slot 10 of metadata tag "actReport" of player to light green dye named "!ac" with lore "&aActive" and "&7Set the report status to active."
                set slot 11 of metadata tag "actReport" of player to light gray dye named "!pr" with lore "&fPending review" and "&7Set the report status to pending review."
                set slot 12 of metadata tag "actReport" of player to yellow dye named "!ie" with lore "&fInsufficient evidence" and "&7Close the report due to insufficient evidence."
                set slot 13 of metadata tag "actReport" of player to pink dye named "!pu" with lore "&cPunish" and "&7Close the report and prepare to punish player."
                set slot 14 of metadata tag "actReport" of player to red dye named "!fl" with lore "&cFlag for inappropriate report" and "&7Flag the report for inappropriate report."
                set slot 15 of metadata tag "actReport" of player to orange dye named "!cl" with lore "&fClose - other reasons" and "&7Close the report for other reasons."
                set slot 16 of metadata tag "actReport" of player to red stained clay named "&7Cancel"
                loop numbers from 0 to 9:
                    set slot loop-number of metadata tag "actReport" of player to black stained glass pane named "&f "
                loop numbers from 17 to 26:
                    set slot loop-number of metadata tag "actReport" of player to black stained glass pane named "&f "
                open (metadata tag "actReport" of player) to player
            else:
                if yaml path "Reports.%arg 1%" from "plugins/betterreports/reports.yml" exists:
                    if arg 2 is "!ac" or "!pr" or "!ie" or "!pu" or "!fl" or "!cl":
                        if arg 2 is "!pr":
                            set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "pending"
                        else if arg 2 is "!fl":
                            set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "flagged"
                        else if arg 2 is "!ac":
                            set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "active"
                        else:
                            set skript-yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml" to "closed"
                        set skript-yaml value "Reports.%arg 1%.actionTakenBy" from "plugins/betterreports/reports.yml" to player
                        set skript-yaml value "Reports.%arg 1%.Action" from "plugins/betterreports/reports.yml" to arg 2
                        set skript-yaml value "Reports.%arg 1%.lastActionDate" from "plugins/betterreports/reports.yml" to now formatted human-readable
                        save yaml "plugins/betterreports/reports.yml"
                        set {_status} to yaml value "Reports.%arg 1%.Status" from "plugins/betterreports/reports.yml"
                        set {_timestamp} to yaml value "Reports.%arg 1%.Timestamp" from "plugins/betterreports/reports.yml"
                        set {_player} to yaml value "Reports.%arg 1%.Player" from "plugins/betterreports/reports.yml"
                        set {_uuid} to yaml value "Reports.%arg 1%.UUID" from "plugins/betterreports/reports.yml"
                        set {_reportedby} to yaml value "Reports.%arg 1%.reportedBy" from "plugins/betterreports/reports.yml"
                        set {_reason} to yaml value "Reports.%arg 1%.Reason" from "plugins/betterreports/reports.yml"
                        set {_actionby} to yaml value "Reports.%arg 1%.actionTakenBy" from "plugins/betterreports/reports.yml"
                        set {_action} to yaml value "Reports.%arg 1%.Action" from "plugins/betterreports/reports.yml"
                        set {_lastaction} to yaml value "Reports.%arg 1%.lastActionDate" from "plugins/betterreports/reports.yml"
                        send "%{_prefix}% &fYour action &b%arg 2% &fhas been saved. Here are the details:"
                        send "&c=================================================="
                        send "&7Report ID: &f%arg 1%    &7Status: &f%{_status}%"
                        send " "
                        send "&7Timestamp: &f%{_timestamp}%"
                        send "&7Player: &f%{_player}%"
                        send "&7UUID: &f%{_uuid}%"
                        send "&7Reported by: &f%{_reportedby}%"
                        send "&7Reason: &f%{_reason}%"
                        send " "
                        send "&7Action taken by: &f%{_actionby}%"
                        send "&7Action: &f%{_action}%"
                        send "&7Last action timestamp: &f%{_lastaction}%"
                        send "&c=================================================="
                        loop all players:
                            set {_notifyperm} to getConfig("Permission.notifyReport")
                            if loop-player has permission "%{_notifyperm}%":
                                send formatted "%{_prefix}% &fReport ID %arg 1% was updated. <run command:/viewreport %arg 1%>&bClick here<reset> &fto view this report." to loop-player
                    else:
                        set {_msg2} to getConfig("Messages.errorType.invalidArg")
                        send "%{_msg2}%" to player
                else:
                    set {_msg3} to getConfig("Messages.errorType.invalidID")
                    send "%{_msg3}%" to player
        else:
            set {_msg} to getConfig("Messages.errorType.noPerms")
            send "%{_msg}%" to player

on inventory click:
    event-inventory = (metadata tag "actReport" of player)
    cancel event
    if event-slot is black stained glass pane:
        cancel event
    if event-slot is red stained clay:
        cancel event
        close player's inventory
    if name of clicked item contains "!":
        cancel event
        set {_id} to event.getView().getTitle()
        replace all "Select an action: " with "" in {_id}
        set {_action} to name of clicked item
        close player's inventory
        make player execute command "/ar %{_id}% %{_action}%"

command /deletereport [<string>]:
    aliases: /delreport, /dr
    description: Delete a player report. (staff)
    trigger:
        set {_delperm} to getConfig("Permission.delReport")
        if player has permission "%{_delperm}%":
            set {_prefix} to getConfig("Messages.Prefix")
            if arg 1 is not set:
                send "%{_prefix}% &bCorrect Usage: &e/deletereport <id>"
                send "%{_prefix}% &eDelete a player report. (staff)"
            else:
                if yaml path "Reports.%arg 1%" from "plugins/betterreports/reports.yml" exists:
                    delete yaml value "Reports.%arg 1%" from "plugins/betterreports/reports.yml"
                    save yaml "plugins/betterreports/reports.yml"
                    set {_repdel} to getConfig("Messages.reportDeleted")
                    send "%{_prefix}% %{_repdel}%"
                else:
                    set {_msg2} to getConfig("Messages.errorType.invalidID")
                    send "%{_msg2}%" to player
        else:
            set {_msg} to getConfig("Messages.errorType.noPerms")
            send "%{_msg}%" to player