Commit Graph

98 Commits

Author SHA1 Message Date
Zandario
77db52dc6b Corrects record_feedback()'s copy/paste comment (#74962)
## About The Pull Request

Corrects `record_feedback()`'s copy/paste comment.

## Pointless history

Originally being added in e2a8a5e, it kept its name and args for quite a
few years, that was until #32188 which had it renamed to
`record_feedback` and its args pretty much doubled. In between these
times the known copy/paste comment was already around, but that wasn't
updated, until now apparently.
2023-04-25 20:20:02 -06:00
san7890
ccef887efe Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR
TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW
RATHER THAN AFTER THE FACT.

## About The Pull Request

Hey there,

This took a while to do, but here's the gist:

Python file now regexes every file in `/code` except for those that have
some valid reason to be tacking on more global defines. Some of those
reasons are simply just that I don't have the time right now (doing what
you see in this PR took a few hours) to refactor and parse what should
belong and what should be thrown out. For the time being though, this PR
will at least _halt_ people making the mistake of not `#undef`ing any
files they `#define` "locally", or within the scope of a file.

Most people forget to do this and this leads to a lot of mess later on
due to how many variables can be unmanaged on the global level. I've
made this mistake, you've made this mistake, it's a common thing. Let's
automatically check for it so it can be fixed no-stress.

Scenarios this PR corrects:

* Forgetting to undef a define but undeffing others.
* Not undeffing any defines in your file.
* Earmarking a define as a "file local" define, but not defining it.
* Having a define be a "file local" define, but having it be used
elsewhere.
* Having a "local" define not even be in the file that it only shows up
in.
* Having a completely unused define*

(* I kept some of these because they seemed important... Others were
junked.)
## Why It's Good For The Game

If you wanna use it across multiple files, no reason to not make it a
global define (maybe there's a few reasons but let's assume that this is
the 95% case).

Let me know if you don't like how I re-arranged some of the defines and
how you'd rather see it be implemented, and I'd be happy to do that.
This was mostly just "eh does it need it or not" sorta stuff.

I used a pretty cool way to detect if we should use the standardized
GitHub "error" output, you can see the results of that here
https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792
## Changelog
Nothing that really concerns players.

(I fixed up all this stuff using vscode, no regexes beyond what you see
in the python script. sorry downstreams)
2023-03-29 10:17:03 -07:00
Mothblocks
d67555a0b5 the inevitable Revert "Refactors admin verbs from giant ass lists into datums" in case stuff breaks (#73206)
Reverts tgstation/tgstation#72407
2023-02-05 11:44:38 +13:00
Zephyr
7f25d7f17b Refactors admin verbs from giant ass lists into datums (#72407)
## About The Pull Request

See title.
## Why It's Good For The Game

Makes it easier for people to add new admin buttons, and also removes
the giant ass ugly lists that are an affront to my eyes.

Yes you are still able to call them manually via the verb bar

![image](https://user-images.githubusercontent.com/12817816/210163285-2ecb4b59-67b4-47d2-b324-77048ce852fe.png)

![image](https://user-images.githubusercontent.com/12817816/210163288-5a0ec98c-9589-4cab-8a6b-1ab5151aa040.png)
## Changelog
🆑
refactor: Admin verbs are now datums with a dedicated panel handler
admin: Admin verbs now come with a handy description when you hover over
them!
/🆑

---------

Signed-off-by: GitHub <noreply@github.com>
2023-02-03 16:32:37 -08:00
Mothblocks
9d0cdfe909 Adds an Escape Menu (#72906) 2023-01-26 00:25:16 -08:00
Zonespace
862c079d4e adminhelp logs are now sanitized correctly (#72501)
## About The Pull Request
Properly sanitizes adminhelp replies to match the sanitization given to
the initial adminhelp


![image](https://user-images.githubusercontent.com/41448081/210929570-e1d3c29b-93aa-4140-a52e-e15c4222c2e6.png)

## Why It's Good For The Game
LogBuddy breaks if any admin replies to a message over multiple lines,
so this fixes that

## Changelog
🆑
admin: Logbuddy should no longer fail to parse logs with multi-line
adminhelp replies
/🆑
2023-01-08 13:09:12 -08:00
Funce
a5e579e0c8 Admins can now safely cancel the "Admin PM" verb (#70705) 2022-10-21 21:24:57 -07:00
LemonInTheDark
f531e30962 Catches an edge case in ahelp replies (#69053)
It turns out if you hit reply to an ahelp before it was closed, and then
sent back the input() after close, you'd end up with a runtime leaking
your reply, and no feedback.

This catches that case, and instead forwards it to a new ahelp, so the
text isn't lost, and the closed ticket is respected

Approved by sitting headcatmin Timberpose

🆑
fix: Attempting to send back a reply to an ahelp after it is closed now sends the reply to a new ticket, rather then just dropping it and leaving you for dead with a runtime
admin: see above
/🆑
2022-08-07 13:35:28 +01:00
LemonInTheDark
4b0b64df6b Fixes admin recipients seeing double pm messages (#68977) 2022-08-05 06:57:56 -07:00
LemonInTheDark
59285861dd Refactors admin PMs to be hopefully more resilient (#68344)
* Begins refactoring admin pms, with a focus on runtime safety and ease of understanding

There's more I want to do here, mostly with spans and cleaning up sone
logic flow to be easier to understand

The primary thrust of it is making explicit any assumptions we make about values
This is important because this is sensitive code, and runtimes are not acceptable, since they both leak information and could lead to dropped ahelps, which is almost worse.

I'm also splitting the proc up into subsections, in an attempt to make it easier to reason about and work with
As a side effect of this, some operations need to be done more then once to avoid potential debugger escalation.

Related to this, I'm also no longer directly passing around client references through the procs. I instead pass the result of a pretty basic proc into each, to avoid issues with sleeping and such.

Oh, and I fixed a bug that made it impossible to reply to remote ahelp
responses. I hate this place.

* Converts all uses of the linkify span to a macro. One of these doesn't have a closing span, not sure if that's a bug or a feature

* Cleans up more logic embedded inside data, since this is critical code

Changes the backup for replying to someone who logs out, instead of
using the first person to send something to the ticket as our backup, we
use the recipient's ckey.

* some cleanup

* Converts a few more things over to the pattern

Reorganizes and deocuments sends_adminpm_message to be less hard to
track/read

* Cleans up a hanging proc that needed filtering

* Does a passthrough over tgs, makes stealthmin keys actually unique

* cleanup, screed at the top of the file

* cleanup, comments, etc

* Thanks trash, I can in fact not spell

* ok yeah I really can't spell

* updated comment to explain how code works

* messsage -> message spellcheck

* Nullchecking prevention

if for whatever reason someone in the future adds code that lummox says can sneakily allow for Logout() to execute between this and the last time client was checked, this could potentially runtime without nullchecking

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2022-08-01 20:58:15 -07:00
san7890
9f3035389b [s] Patches potential runtimes in AdminPM (#68324)
About The Pull Request

Hey there,

6e29689 seemed to work alright on my end, but apparently there are cases where current_ticket.id = NULL. This would cause runtime trace errors that would start to list out the first few words of most adminhelps. Fuck.

You probably could use recipient.current_ticket.id on the "else" portion but I woke up to this and I'm not 100% certain if that will null out at this time. Might also be apt to revert #68215 entirely?
Why It's Good For The Game

Those shouldn't show up in runtimes!
Changelog

Nothing particularly player facing.
2022-07-11 08:51:00 +12:00
san7890
6e29689e60 Adds the Ticket #ID To AdminPM Logs (#68215)
Hey there,

Statbus has been broken for 2 months+, and what I've been doing when I need to reference a ticket is to go into the raw-logs and parse it for the involved CKey. However, you tend to get a lot of noise searching for the signal when you filter in Notepad++, so I decided today would be a good day to have the Ticket #ID in all associated AdminPMs (which are already logged in ADMINPRIVATE).
2022-07-08 15:00:44 -04:00
Seth Scherer
2baeb1b635 Ports the player ticket panel from skyrat (#66954)
* Ports the player ticket panel from skyrat
Adds a player side panel to view active admin tickets, this will make it
easier for players to find previous admin messages, remember what they
said previously etc. This is especially good for the cases that TGchat
drops messages
2022-05-20 15:15:32 -04:00
Nick
2b411035c4 Adds additional DB logging for admin help interactions (#62994)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-11-22 14:53:08 -08:00
Ryll Ryll
3ef17dd5ad Admins now get a little notice if they start responding to a ticket someone else is already responding to (#62025) 2021-10-18 16:40:01 -07:00
Ghilker
95c8e00af7 cleanup _HELPERS/_lists.dm and all the necessary files (#61827)
Bring _HELPERS/_lists.dm to latest standards by:
-Adding proper documentation and fixing existing one
-Giving vars proper names
-Procs now use snake case as per standard (many files that use those procs will be affected)
2021-10-12 14:48:51 +01:00
Mothblocks
0990a8ddcf Give admins the ability to put a popup notice for players in tickets (#61010)
Admins can now give players a popup if they are not responding to tickets.
Popup is cleared when player replies or ticket is resolved/closed.
As more and more of the chat screen is made irrelevant, new players read it less and less.
This means that a lot of new players are ignoring ahelps, which is something I've encountered myself.
2021-08-29 21:11:38 -03:00
Fikou
51cba51347 removes some uses of var in world (#60407)
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
2021-07-26 16:25:06 -07:00
Watermelon914
375a20e49b Refactors most spans into span procs (#59645)
Converts most spans into span procs. Mostly used regex for this and sorted out any compile time errors afterwards so there could be some bugs.
Was initially going to do defines, but ninja said to make it into a proc, and if there's any overhead, they can easily be changed to defines.

Makes it easier to control the formatting and prevents typos when creating spans as it'll runtime if you misspell instead of silently failing.
Reduces the code you need to write when writing spans, as you don't need to close the span as that's automatically handled by the proc.

(Note from Lemon: This should be converted to defines once we update the minimum version to 514. Didn't do it now because byond pain and such)
2021-06-14 13:03:53 -07:00
Mothblocks
0f435d5dff Remove hideous inline tab indentation, and bans it in contributing guidelines (#56912)
Done using this command sed -Ei 's/(\s*\S+)\s*\t+/\1 /g' code/**/*.dm

We have countless examples in the codebase with this style gone wrong, and defines and such being on hideously different levels of indentation. Fixing this to keep the alignment involves tainting the blames of code your PR doesn't need to be touching at all. And ultimately, it's hideous.

There are some files that this sed makes uglier. I can fix these when they are pointed out, but I believe this is ultimately for the greater good of readability. I'm more concerned with if any strings relied on this.

Hi codeowners!

Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
2021-02-14 16:53:29 -08:00
skoglol
f90867031e Fixes an adminPM dead end eating replies (#55127)
If you tried to reply to an admin that had deadminned while you were typing you would get an error and your message was eaten. Now sends to MessageNoRecipient if theres an open ticket, or prints a warning and the message in chat if there isn't.
2020-11-26 14:43:27 +00:00
Bobbahbrown
4e48e1379d Interview System / Soft Panic Bunker (#54465)
About The Pull Request

Ports and improves my interview system that has been previously used in the summer ball and toolbox tournament events. Allows for a 'softer' panic bunker, wherein players who fall below the required living time limit can still join the server and be restricted to filling out a questionnaire. Upon completing the questionnaire, the player may be allowed into the server by an administrator. If the application is approved, they get a notification that they will be reconnected and upon reconnecting will have all verbs as they usually would. If the application is denied the user is put on a cooldown after which they may submit a new questionnaire.

Players who are being interviewed (herein interviewees) have no verbs other than those required for the stat panel to function, as well as a verb to pull up the interview panel. Interviews do not persist through restarts, and the ability to join that is granted by an accepted interview is only valid for the duration of that round.

Open interviews are listed under a new 'interviews' tab for admins, which is VERY similar to the existing tickets tab.

Below is what a player who is flagged as an interviewee will see when they join the server. They can do nothing but respond to the questionnaire or leave.
image

This is what an administrator sees after an interview is submitted, they will also see a corresponding message within their chatbox, and an age-old BWOINK when an interview is submitted.
image

The interviews tab, which is similar to the tickets menu. You can open the interview manager panel to view all active (including non-submitted) interviews, queued (submitted) interviews, and closed interviews.

image
FAQ:

What happens if someone submits an interview when no admins are on? It's treated like adminhelps are, the message gets sent to TGS to be dispatched off to configured end-points (like Discord or IRC), and the user is notified that their interview was handled this way.

Can you configure the questions? Yes, in config/ there is now a interviews.txt file in which the welcome message and the individual questions can be set and modified.

Can this be turned on and off during a round? Yes, it can be toggled like the panic bunker. It requires the panic bunker to be raised in order to function.

Can interviewees have further questions asked to them? Yes, if you admin-pm them, which is possible using regular means or a conveniently placed button on the interview UI, they will be able to respond to the message.
Technical details

To use the interview system you must have the panic bunker enabled, this is an additional setting for the panic bunker. It can be set through the PANIC_BUNKER_INTERVIEW setting in config.txt, or alternatively enabled in-game as prompted during the panic bunker toggling process. It also can be toggled on its own using a verb added for this purpose, Toggle PB Interviews found under the server tab. These new actions are included in the logging for the panic bunker. I have also added a reporting stat to the world topic status keyword, which now reports if the interview system is on using the keyword interviews.

As mentioned above, for server operators, configure the questions and welcome message in config/interviews.txt.

Note to maintainers and those with big brains I had to add a call to init_verbs on the stat panel window being ready because seemingly a race condition exists wherein the add_verb of the 'view my interview' verb doesn't cause a refresh of the tabs (and therefore doesn't show the 'Interview' tab) when running in dream daemon but running it directly from visual studio code properly shows the tab. Adding a init_verbs call directly after adding the verb didn't seem to help.
A note for downstreams

If you don't use the HTML stat panel (which may not be a bad thing) then you will have to do some conversion from the HTML stat panel stuff used here to the old style stat panels. It's pretty trivial, but just be aware of that. You can see how I used to use the old stat panels in my PR from the summer ball, here, which should be helpful.
Why It's Good For The Game

This allows for a softer version of the panic bunker which impedes the flow of malicious players while allowing genuine players a chance to enter a round to gain enough time to not be affected by the panic bunker's restrictions.
Changelog

🆑 bobbahbrown
add: Added the interview system, a 'soft' panic bunker which lets players who would normally be blocked from joining be interviewed by admins to be selectively allowed to play.
/🆑
2020-10-25 14:10:06 +13:00
Aleksej Komarov
64dcf44cc6 tgchat: Hotfixes, Message Annotations (#52947)
This PR changes the message pipeline a little bit to support list-based messages, which can be annotated with custom data. Function signature of to_chat was slightly changed as well:

// Plain text message
to_chat(client,
  type = MESSAGE_TYPE_INFO,
  text = "foo")

// HTML message
to_chat(client,
  type = MESSAGE_TYPE_INFO,
  html = "<span class='notice'>foo</span>")

Old to_chat format is still supported, but handle_whitespace, trailing_newline and confidential flags have no effect. confidential flag could still be revived though, if there is enough merit in it, for example to filter out confidential messages when saving a chat log.

The reason for using /list and not /datum, is because lists are plain faster, and there are minimal data transformations - these lists are fed directly to json_encode and sent to tgchat.

Plain text messages do not need to be HTML-escaped, which makes them safer and more performant than HTML messages. Plain text messages can be made interactive (or formatted with CSS) by custom-handling them in javscript based on message type and annotations.

It would be impossible to annotate every single message in the game (at the moment of writing, there are 9447 to_chat calls in the code), but it could be done selectively, for only those messages that are hard to classify by span classes (and there are still A LOT of them).
Please annotate more messages. Thank you.

    Fixes #52943
    Fixes #52908
    Fixes #52816

Changelog

cl
add: tgchat: Unread message count is now smarter and won't increase on other tabs if you have already read the same message in the active tab.
add: tgchat: Admin PMs are now properly annotated and can be filtered into separate tabs.
fix: tgchat: Fix: Highlighted message overlay no longer blocks clicks. Clicking a highlighted (F) link should work as it should.
fix: tgui: Fixed NTOS bluescreen due to calling .includes() on a stylesheet href which could be null on certain browsers.
code: tgchat: Chat schema bumped to version 5. All chat-related settings were reset to avoid breakage.
/cl
2020-08-17 10:38:38 +12:00
skoglol
fcf1f25301 sound back 2020-07-16 12:43:23 +02:00
skoglol
0194169631 Oh we got several procs 2020-07-16 12:36:28 +02:00
skoglol
7d3af73d12 Fixes some adminhelp issues 2020-07-16 11:57:40 +02:00
jdawg1290
62676e72a8 Force LF line endings with gitattributes and convert repo (#52266)
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
2020-07-16 03:02:40 +03:00
Jordan Brown
63e20801ed TGS chat usage cleanup
- Rename send2tgs to sent2adminchat.
- Move both chat procs to SSdiscord.dm.
- Fix bug when sending to TGS4 non-admin chats.
- Add DMdocs
- Improve notify command
  - Store mentions as strings
  - Disable command if config setting isn't enabled
2020-05-23 13:33:09 -04:00
Fikou
57a93ea76a [s] does the html admin thing in a better way probably (#51221) 2020-05-23 01:44:34 -07:00
Fikou
874ff0a6e3 [s] you can no longer inject html in ahelps (#51213)
Fixes ahelp escaping.
2020-05-22 22:28:39 +02:00
Rob Bailey
c20a04543b Port of Replays from Yogstation (#48579)
* demos (ported from yogstation)

rustg update + write with no format

use external hook for logging

use proper log vars

fix + clarifying comment

don't start the log

release build of rust-g

fix something caught by the lint

Update code/__DEFINES/subsystems.dm

Co-Authored-By: Jordan Brown <Cyberboss@users.noreply.github.com>

Update code/controllers/subsystem/demo.dm

Co-Authored-By: JJRcop <jrubcop@gmail.com>

Update code/controllers/subsystem/demo.dm

Co-Authored-By: JJRcop <jrubcop@gmail.com>

moves hooks out of a dedicated file

len = 0 to Cut(), remove semicolons

untyped loop

* updated rust_g

* 513 updates
2020-04-06 13:15:48 -04:00
MrPerson
f7eb2c905b Unicode awareness Part 2 -- copytext() (#48512)
* Unicode support Part 2 -- copytext()

This is the transition of all copytext() calls to be unicode aware and also some nearby calls in the same functions. Most things are just replacing copytext() with copytext_char() as a terrible character limiter but a few others were slightly more involved.

I replaced a ton of
````
var/something = sanitize(input())
something = copytext(something, 1, MAX_MESSAGE_LEN)
````

with a single stripped_input() call. stripped_input() already calls html_encode(), trim(), and some other sanitization so there shouldn't be any major issues there.

This is still VERY rough btw; DNA is a mess, the status displays are complete ass, there's a copytext() in code\datums\shuttles.dm that I'm not sure what to do with, and I didn't touch anything in the tools folder. I haven't tested this much at all yet, I only got it to compile earlier this morning. There's also likely to be weird bugs until I get around to fixing length(), findtext(), and the rest of the string procs.

* Makes the code functional

* Assume color hex strings are always # followed by ascii.
Properly encodes and decodes the stuff in mob_helpers.dm which fixes some issues there.

* Removes ninjaspeak since it's unused
2020-01-18 13:07:22 +13:00
Nick
e7a9bf4a6d Yet another db tickets bugfix #48854 2020-01-18 11:18:38 +13:00
Nick
c758bdd51c [Ready] Database Tickets (#48727)
* DB ticket procs

* Schema changes for DB tickets

* Schema version update

* Fixes requested by Jordie

* SQL updates

Adds a recipient column

* Still one dangling issue where this DOESN'T WORK

* Alright, this should work

* Requested SQL fixes

* Rogue changes

* less bad defaults

* utf8 for the utf8 gods

* aaaaaa

* Update tgstation_schema_prefixed.sql

* Update tgstation_schema.sql

* Update database_changelog.txt

Co-authored-by: Jordie <4343468+Jordie0608@users.noreply.github.com>
2020-01-17 05:35:16 +11:00
Bobbahbrown
0d7ef73b17 Refactors References to IRC to be TGS (#47954)
* TGS updates round 1

* TGS updates round 2
2019-11-30 03:59:42 -08:00
spookydonut
dd6fa5eded More spawn/sleep removals (#47634)
* remove more spawns

* more

* more

* varsets

* oops

* unfuck this
2019-11-13 03:07:59 -08:00
senjx
54b17038b6 Fixes #42319, closes bold tag for IRC admin pms
Adds a missing closing bold tag to fix the formatting of IRC admin PMs.
Fixes https://github.com/tgstation/tgstation/issues/42319
2019-07-24 02:04:47 -04:00
Rob Bailey
ceca1e605e [READY] Yet more darkmode tweaks and fixes (#43306)
* fuck you whoever made the last icon it was garbage

* ticket log fixes

* ticket log fixes

* changes colors from hardcode per line to a define

* some nicer darkmode colors

* asay and ooc name default fixes

* fuck you appveyer build again

* slight brightening of the default font color

* properly fixes tip of the round being hard to read
2019-03-25 20:49:59 +13:00
Rob Bailey
930e9dc501 [READY] Darkmode fixes (#43252)
* better darkmode v1

* ever better colors

* slightly improved tip color + fixed scrolly bug

* updates skin.dmf as well as some small color tweaks

* slightly tweaked more readable info and admin shit

* span_class fix

* merges ooc fixes

* whoops

* MC and ticket screen fix

* no default darkmode

* skin fixes

* more obnoxious adminpm

* more obnoxious adminshit

* skin revert to ensure proper light theme.

* prevents weirdness with default whiteness
2019-03-22 08:56:17 +13:00
Kmc2000
6b6537cccd Adds toggleable darkmode to the game! (#43072)
* Adds toggleable darkmode to the game! (Use the toggle darkmode verb if you want to use light mode)

* Removes a random linechange

* Undo unintentional changes

* Changes some forced font tags to use spans, which won't break darkmode.

* Fixes up some problems I found while testing
Darkmode is no longer default (this caused some issues with people getting a broken chat)

* Darkmode sucks less now

* Darkmode button now works again
2019-03-21 11:02:41 +13:00
ShizCalev
85be0e5804 Fix stealthmin adminpm issue (#43167) 2019-03-19 14:17:27 -07:00
Unknown
7ff32c1b8c as text to as message
it really is that easy
2018-12-07 20:09:29 -08:00
ShizCalev
c167d37121 Fixes admin damage editting not logging the target's real name / key. (#41318)
* Fixes admin damage editting not logging the target's real name / key.

* few more areas
2018-11-06 14:10:20 -05:00
Jordan Brown
26b6fab1fe Merge branch 'pr-38604'
Signed-off-by: Jordan Brown <Cyberboss@users.noreply.github.com>
2018-06-28 14:22:03 -04:00
ShizCalev
89752866aa Merge branch 'master' into spellcheck 2018-06-26 16:43:41 -04:00
Ling
d40325c418 Fixes incorrect closing html tag 2018-06-26 22:06:27 +02:00
Tad Hardesty
c4dbe0a619 Add DOM-based linkify to goonchat (no more URLs in IC) (#38693)
* Add DOM-based linkify to goonchat (no more URLs in IC)

* Add linkify spans to places where OOC messages appear

This includes:
- OOC
- Deadchat
- Admin chat
- Admin logs
- Admin PMs
- Prayers

* Limit fallback behavior to linkify spans
2018-06-26 14:44:34 +12:00
ShizCalev
ff532a4ca4 Spellchecks TGStation 2018-06-19 18:57:44 -04:00
Dax Dupont
5c7af29fae Fixes accidental empty ahelp replies (#38052) 2018-05-25 17:35:21 +03:00
kevinz000
f300a5c155 Interaction/Attack Hand Refactor (#36405) 2018-03-23 11:20:54 +01:00