TRedeemerTS3 is a wrapper for TS3’s query interface written in and for Delphi. It is available for you on request. It is being used in YaTQA, which is its reference implementation.
The engine comes in two flavours: active and passive. For most projects, the active engine is enough. The passive one just adds event notifications and the
The engine is made to be dead easy to use for Delphi programmers. There is nearly no TS3 query experience required (you just should know that you have to log in before sending most commands 😉). To not make too many record classes, array functions do not return arrays but a record with the properties themselves being one array each. Notifications of the passive engine are not wrapped but returned in raw. There might be a wrapped passive engine in the future.
Please note that - due to limitations on Delphi’s side – command line programs based on passive RedeemerTS3 cannot send commands within the notify event handler procedure of the same RedeemerTS3 instance. You can use two instances of RedeemerTS3 to send commands while handling events. Fixed in P:126.96.36.199 / T:1.2.4 (21 Nov 2015).
Also note that TRedeemerTS3A.IgnoreEmptyResultSets ignores database empty result set (1281) only, not empty result set (2563).
RedeemerTS3 1.0 (08.07.2011)
- This is the first complete release. It includes all query features but Help, ServerNotifyRegister, ServerNotifyUnregister, FtInitUpload and FtInitDownload.
RedeemerTS3 1.0.1 (10.07.2011)
- Fixed two field names that had a spelling mistake (ClientOnputMuted instead of ClientInputMuted)
RedeemerTS3 1.0.2 (20.07.2011)
- Changed data type of ClientIsTalker from Integer to Boolean
RedeemerTS3 1.0.3 (25.07.2011)
- Added the force parameter in ServerGroupDelete
- Fixed a bug with ServerGroupCopy caused by some ´ which got there somehow
- Fixed a bug with ChannelGroupAddPerm caused by sending Perm SIDs as Perm ID
RedeemerTS3 1.0.4 (25.07.2011)
- Fixed a bug with the Unescape function which prevented the application from unescaping the last character
RedeemerTS3 1.0.5 (26.07.2011)
- Changed data type from ClientFlagAvatar from Boolean to string
RedeemerTS3 1.0.6 (27.07.2011)
- Fixed a bug in the FtCreateDir function, that sent a wrong command
RedeemerTS3 1.0.7 (28.07.2011)
- Changed datatype for the parameter ClID of the BanClient function from string to Integer
- Fixed a bug that caused the Force parameter of ChannelDelete to not be sent properly
- Fixed a bug related to the Order parameter of ChannelMove
- Changed something in the parameter finding engine
- Changed data type of ChannelForcedSilence from Integer to Boolean
RedeemerTS3 1.0.8 (05.08.2011)
- Added a new overloaded version of Use for a Word parameter, which will select a port while any datatype higher than that will select an SID
RedeemerTS3 1.1.0 (12.08.2011)
- Completely changed the way how data is sent, which fixed a very serious bug when sending a large amount of information which could for some unknown reason break your internet connection until you re-plug your LAN cable
RedeemerTS3 1.1.1 (07.10.2011)
- Added my own function to convert strings to UInt64 in order to fix the quota bugs
RedeemerTS3 1.1.2 (08.10.2011)
- Fixed a bug in the ServerSnapshotDeploy procedure
- Did some code cleanup
- Fixed a bug that lead to errors when using some characters, e.g. the Eszett ligature
RedeemerTS3 1.1.2b (09.10.2011)
- Did some code cleanup to remove Delphi's compiler hints
RedeemerTS3 1.2.0 (24.10.2011)
- If there is no data received as a result of a request, an error message is displayed now and the complete function stops.
- If any data is received before the timeout, another timeout is added. This will be repeated until an error is received (which is usually error 0, meaning no error) or no new data is received (which will lead to the above-mentioned error).
RedeemerTS3 1.3.0 (28.10.2011)
- Added logview301 function to support server version 3.0.1 beta
RedeemerTS3 1.3.1 (29.10.2011)
- The Quit function does no longer wait for a response.
RedeemerTS3 1.3.2 (29.10.2011)
- The Quit function does not check for errors anymore and can no longer fail.
RedeemerTS3 1.4.0 (01.11.2011)
- Added FtInitUpload and FtInitDownload functions
- Functions for uploading and downloading files were added. They are not part of the TRedeemerTS3 class but independent functions that can be called without having to create an instance of RedeemerTS3.
RedeemerTS3 1.4.1 (03.11.2011)
- Added WorkEvent and EndEvent parameters to Upload and Download functions in order to specify events that will be called during and after the operation (sending the Key is not included)
- The following undocumented information is now returned for ClientDBInfo: client_database_id, client_lastconnected, client_totalconnections, client_description, client_month_bytes_uploaded, client_month_bytes_downloaded, client_total_bytes_uploaded, client_total_bytes_downloaded, client_icon_id, client_base64HashClientUID, client_lastip
RedeemerTS3 1.4.2 (05.11.2011)
- FtInitDownload and FtInitUpload now raise their own error class if a key could not be requested (the errors raised by them are not part of the default status line in the response).
RedeemerTS3 1.4.3 (06.11.2011)
- Fixed an error with an error message
RedeemerTS3 1.4.4 (07.11.2011)
- Overloaded _Receive to work with newer versions of Indy
RedeemerTS3 1.4.5 (07.11.2011)
- Fixed spelling mistake in an error message.
RedeemerTS3 1.5.0 (11.11.2011)
- Added _Idle procedure for idling
- Made _SendStr (internal procedure that is used for sending commands) thread-safe
- Fixed a bug that prevented the engine from correcty displaying the last command in error messages if it had no parameters
RedeemerTS3 1.5.1 (12.11.2011)
- Missing permissions are now displayed as a text instead of a number (if possible, but if not, a sharp-sign is displayed in front of the number)
RedeemerTS3 1.5.2 (13.11.2011)
- FtFileInfo now returns the path as a string, not as an array of string
RedeemerTS3 1.5.3 (13.11.2011)
- Changed the syntax order in which clientkick is sent to the server, because it did not work like it was before
- Changed the syntax order in which clientmove is sent to the server
- Removed the array version of clientpoke, because it is not implemented on the serverside
RedeemerTS3 1.6.0 (08.01.2012)
- Added a way to turn off the timeout for ServerSnapshotCreate.
- Changed VirtualserverWeblistEnabled of ServerInfo from Integer to Boolean.
- Added the following return values to ServerInfo: virtualserver_ask_for_privilegekey, virtualserver_hostbanner_mode, connection_filetransfer_bytes_sent_total, connection_filetransfer_bytes_received_total, connection_packets_sent_speech, connection_bytes_sent_speech, connection_packets_received_speech, connection_bytes_received_speech, connection_packets_sent_keepalive, connection_bytes_sent_keepalive, connection_packets_received_keepalive, connection_bytes_received_keepalive, connection_packets_sent_control, connection_bytes_sent_control, connection_packets_received_control, connection_bytes_received_control
RedeemerTS3 1.7.0 (20.02.2012)
- Added a way to turn off the timeout for ServerSnapshotDeploy.
- Added ClientOriginServerID to WhoAmI.
- Added support for servergroupautoaddperm and servergroupautodelperm.
RedeemerTS3 1.8.0 (21.02.2012)
- Completely changed the way how received strings are sorted, which might also allow easier addition of passive features
- Querying the name of the failed PermID can now be disabled by setting AskForFailedPermSID := False
- Added support for 3.0.2 anti-flood properties (ServerInfo302)
RedeemerTS3 1.8.1 (23.02.2012)
- Changed datatype of bandwidth properties to UInt64 (for both, ServerInfo and ServerInfo302)
RedeemerTS3 1.8.2 (24.02.2012)
- Changed the new receiving function to not raise unimportant errors for the debugger
RedeemerTS3 1.8.3 (26.02.2012)
- Fixed bug in the servergroupautoaddperm and servergroupautodelperm functions
RedeemerTS3 1.8.4 (27.02.2012)
- Fixed bug that caused ClientFind to return an array, though the query command is supposed to return only one result
RedeemerTS3 1.8.5 (04.03.2012)
- Changed datatype of Skip and Negated flags of PermOverview to Boolean
RedeemerTS3 1.9.0 (15 Mar 2012)
- Added support for token* aliases for privelegekey*
- Added experimental support for experimental commands plugincmd, dummy_connectfailed, dummy_connectionlost, dummy_newip, connectioninfoautoupdate, setconnectioninfo, clientsitereport, verifyserverpassword, verifychannelpassword
- Added support for temporary server passwords
- Added support for returning file transfer IPs
RedeemerTS3 1.9.1 (xx Apr 2012)
- Added a way to generally ignore database empty result sets
- Added support for adding temporary server passwords that include channel passwords
- Added support for clientlist -ip
RedeemerTS3 1.9.2 (20 Apr 2012)
- Added ServerInfo305
- Added ServerInfoCombined which includes the properties from all versions
RedeemerTS3 1.9.3 (22 Apr 2012)
- Fixed a bug that prevented the OnWork event from being triggered for uploads
RedeemerTS3 1.9.4 (30 Nov 2012)
- Added support for channel_flag_private
RedeemerTS3 1.9.5 (12 Dec 2012)
- Added support for new permissionlist
RedeemerTS3 1.9.6 (20 Dec 2012)
- Added a variable to have the cursor changed during queries (only works when the host application is non-console)
RedeemerTS3 1.9.7 (24 Dec 2012)
- Fixed memory leaks caused by failing file transfers
- Added a parameter to have the cursor changed file transfers as well as TSDNS look-ups
- Fixed a bug that caused the waiting cursor to always be crAppStart
- Fixed a bug that prevented the cursor from being restored after an error occured
RedeemerTS3 1.9.8 (2 Jan 2013)
- Moved _Escape to public for creating custominfo sets
RedeemerTS3 1.9.9 (28 Feb 2013)
- Logview301 can now raise exceptions.
RedeemerTS3 1.9.10 (06 Mar 2013)
- Added support for non-GUI uses.
RedeemerTS3 1.9.11 (10 Mar 2013)
- Timeout can be set.
RedeemerTS3 1.10.0 (31 Mar 2013)
- RedeemerTS3 is no longer based on IdTelnet and is therefore no longer busy-waiting for a thread.
RedeemerTS3 1.10.1 (12 May 2013)
- Added support for new 188.8.131.52 serverinfo variable
RedeemerTS3 1.10.2 (25 May 2013)
- Fixed a bug that caused parameters for ServerList to be without effect
- Added TServerInfo field for VirtualserverUniqueIdentifier
- Removed All parameter from ServerList, as the server ignores it
no own version (5 Aug 2013)
- Fixed spelling bug in German version
RedeemerTS3 1.11.0 (12 Aug 2013)
- A log/debug feature has been added. It might have memory leaks (especially when deploying snapshots), but I still need to check that.
RedeemerTS3 1.12.0 (13 Oct 2013)
- Added support for new 3.0.10 channellist (SecondsEmpty) and channelinfo (ChannelSecurityHash, ChannelDeleteDelay, SecondsEmpty).
- ChannelList’s Icon now defaults to False like all the others do.
- Added support for new 3.0.9 clientlist (ClientBadges) and clientinfo (ClientVersionSign, ClientSecurityHash, ClientBadges).
RedeemerTS3 1.13.0 (20 Oct 2013)
- Added non-DNS IPv6 support (TS3 doesn’t have this, so this change currently makes no sense)
- Added default permission names for the unambigious first 13 permissions (marked with a question mark, so you still know if permget fails)
- Failed permissions now display their permid even if a permsid is available
RedeemerTS3 1.13.1 (30 Oct 2013)
- Added client_lastip support to clientdblist
RedeemerTS3 1.13.2 (21 Dec 2013)
- TSDNS() function can now use a different Host than the Query.
RedeemerTS3 1.13.3 (23 Dec 2013)
- TSDNS() can now set a custom timeout.
RedeemerTS3 1.13.4 (03 Jan 2014)
- ServerCreate() now expects _Keys and _Values, both of which are arrays of string.
RedeemerTS3 1.13.5 (27 Jan 2014)
- Added needed permissions (modify, add, remove) to ServerGroupList and ClientGroupList
RedeemerTS3 1.13.6 (20 Mar 2014)
- VirtualserverAutostart is now a boolean
- Swapped order of SecondsEmpty and TotalClientsFamily in channellist
- Updated some response records to match undocumented changes
- hostinfo: connection_filetransfer_bytes_sent_total, connection_filetransfer_bytes_received_total
- serverinfo: virtualserver_channel_temp_delete_delay_default
RedeemerTS3 A:1.13.7/P:1.0 (22–25 Mar 2014)
There are now three parts of RedeemerTS3. RedeemerTS3 is the host unit. File transfer and TSDNS functions have been moved there. RedeemerTS3A is the new name of RedeemerTS3. The A is for “active”.
RedeemerTS3P derives from RedeemerTS3A, implementing the methods Help, ServerNotifyRegister and ServerNotifyUnregister. Because the P stands for “passive”, it also supports passive functions, made available using a thread-based unit design.
- [A] Fixed incorrect call to _SendStr in _Update function, referencing the included global variable and therefore causing a fail if used with another variable.
- [A] All functions are now virtual.
- [A] Fixed Logout being unable to produce errors.
- [A] Swapped order of the two overloaded versions for both, ClientKick and ClientMove, in the sourcecode
- [A] Added overloaded FtDeleteFile and FtRenameFile functions without password
RedeemerTS3 A:1.13.8 (02 Apr 2014)
- [A] Added -all switch to serverlist.
- [A] Added duration parameter and -count switch to clientdblist.
Changes in static only (03 Apr 2014)
- Added a function to check if an IP has been blacklisted
P:1.1 (23 Apr 2014)
- Added IncludeError and RaiseError to _Raw
A:1.13.9/P:1.2 (28 Apr 2014)
- [P] Fixed semaphore bug with servercreate
- [A] Fixed possible bug with channelcreate when called multiple times with more than channel name
A:1.13.10 (08 Jun 2014)
- Fixed SortID returning IconID instead for channel and server group list
P:1.2.1 (08 Jul 2014)
- Because TThread.Queue fails in console applications, it is no longer used in this case. However, it’s impossible for console applications to use any commands in the event handler, because RedeemerTS3 waits for the event handler. You can create a second instance of RedeemerTS3 for active commands if you need this feature in command line applications.
P:1.2.2 (21 Jul 2014)
- Fixed a bug that caused a semaphore exception during debug if a command is sent without waiting for the result (namely _Idle and Quit).
A:1.13.11 (01 Aug 2014)
- Fixed a bug that prevented errors from being displayed if creating a server fails
Changes in static only (24 Aug 2014)
- Added blacklist check timeout
A:1.13.12 (12 Oct 2014)
- Fixed important bug that prevented creating template and query server groups
A:1.13.13 (04 Dec 2014)
- [A] Added connection timeout (5 seconds)
- [Base/Static] Added connection timeout for file transfer functions (5 seconds)
P:1.3 (13 Dec 2014)
- Fixed important semaphore deadlock when losing the connection
Changes in static only (16 Dec 2014)
- Fixed useless compiler warning (how on earth can a result be undefined if I either return a result or raise an error?)
P:1.3.1 (22 Dec 2014)
- A bug introduced in P:1.3 was fixed which caused a semaphore to not be released if Indy was too slow to notice that it was already connected to a server. This frequently (like 50% chance) happened when connecting to
localhoston my five year old Windows XP laptop, which was however supercharged by an SSD, maybe causing the server to answer too fast. This bug was hard to find as the bug didn't occur when using a debugger.
P:1.3.2 (06 Jan 2015)
- Improved handling and reporting flood bans
A:1.13.14 (23 Jan 2015)
- Fixed a bug that caused PermIDGetByName to return a
PermIDof 0, while the actual
permidwas returned as
A:1.13.15 / P:1.3.3 (11 Mar 2015)
WaitAfterCommandvariable to delay all commands by the given number of milliseconds
A:1.13.16 (13 Mar 2015)
- Changed internal string format from UCS-2 to UTF-16
A:1.13.17 / P:184.108.40.206 (07 Jun 2015)
- [A] Changed TServerIDGetByPort.ServerID from string to integer
- [A] _Escape is now static
- _Unescape, _AddParam (protected in RedeemerTS3A) and the two-parameter versions of the four _GetParam* functions are now static
P:220.127.116.11 / T:0.1 alpha (14 Jun 2015)
Added TPlinkRedeemerTS3 (RedeemerTS3T) for SSH support. It derives from TThreadedRedeemerTS3 (RedeemerTS3P).
- [P] Moved most stuff from private to protected
T:0.2 alpha (15 Jun 2015)
- Added support for new hostkeys
P:18.104.22.168 / T:1.0 (16 Jun 2015)
- [P] Changed
quitto wait for a response, thus causing YaTQA to no longer time out instantly
- Fixed a bug that caused _Raw to return the command alongside the result
- [P] Removed one presumably useless line of code...
- Added/fixed notify support
A:1.13.18 / P:22.214.171.124 (19 Jun 2015)
- [A] Changed some VirtualserverPort identifiers to Words
- Added support for the return values of ServerSnapshotDeploy, SID and VirtualserverPort
T:1.1 (27 Jun 2015)
- Fixed a bug that caused empty results in SSH tunnel mode to cause one phantom result (with all strings empty and all numbers -1)
T:1.2 (28 Jun 2015)
- Set telnet to character mode instead of line mode, removing the limit of 4095 bytes per command (easily exceeded by restoring snapshots and some mass permission editing functions) and the ambiguity of SSH returning all the input
- RedeemerTS3T now completely ignores byte 13 (C
\r) when it receives one, because they are only sometimes included with byte 10 (C
\n). This also makes debug output easier to read with many professional editors (like Notepad++).
- RedeemerTS3T no longer needs to override _Raw (also appears to have applied to the previous version, but it was done anyway...).
T:1.2.1 (03 Jul 2015)
- Now connects to
T:1.2.2 (19 Jul 2015)
- Added support for custom command line arguments for
P:126.96.36.199 / T:188.8.131.52 (30 Aug 2015)
- Changed synchronisation with notifys to be finished by the called thread, which means that applications using events now must call
- Fixed a bug that prevented applications from using RedeemerTS3P/RedeemerTS3T without handling notify events
T:1.2.3 (14 Sep 2015)
- [A] This version briefly changes the internal encoding from UTF-8 to CESU-8. This change will be undone without a new version before this version is bundled with the next version of YaTQA.
- RedeemerTS3T now turns off escaping entirely in
telnetto fix a bug in binary-unaware telnet treating
0x9das its escape sequence
P:184.108.40.206 / T:1.2.4 (21 Nov 2015)
- Completely changed the event queue to run in its own thread, preventing all kinds of nasty deadlocks
P:220.127.116.11 / T:1.2.5 (22 Nov 2015)
TThread.Queueas we don’t care about freezes in the event queue thread anymore
A:1.13.19 / P:1.3.4 / T:1.2.6 (05 Jan 2016)
- [P/T] Fixed a bug that prevented displaying the waiting cursor
WaitAfterCommandnow works before the command and takes into account the time elapsed since the last check
WaitAfterCommandfeature from SSH tunnel (because it will be
127.0.0.1and should be whitelisted), although the property will still be there because it was inherited
T:1.2.7 (16 Feb 2016)
- If enabled in
telnetwill not be added to
bashhistory by using a leading space
A:1.13.20 (25 Feb 2016)
- Added a new line to the TeamSpeak error messages that tells you how like this error is related to YaTQA:
- 256, 1537–1543: possibly a YaTQA issue
- 1024–1536, 1544–1791: most likely not a YaTQA issue
- All others: Definitely not a YaTQA issue
P:1.3.5 / T:1.2.8 (05 Mar 2016)
- Fixed a bug introduced in the Winter release that caused the engine to hang when disconnecting from same-machine servers via their LAN IP or
localhoston some Windows 10 computers
- Fixed possible memory leak
- [A] Fixed a bug that sometimes caused an access violation when disconnecting from same-machine servers on some computers
A:1.13.21 / P:1.3.6 (17 Jun 2016)
- Added compatibility for 3.0.13 (
- Added IPv6 support to file transfer functions (query has IPv6 support since 20 Oct 2013)
- Added IPv6 DNS support
- Blacklist check requests must now include the protocol prefix (
ip4:) so this can be used for IPv6 in the future (blacklist server doesn’t seem to support this yet, though)
Changes in static only (17 Aug 2016)
This is included in YaTQA 3.6, but the build date wasn’t updated.
- Fixed two bugs that prevented file transfers from working if using an IPv6 DNS
T:1.2.9 (30 Aug 2016)
- Fixed a bug that caused a strange message when the blacklist checker received an empty or no answer from the server
- Fixed a bug that prevented users from checking the blacklist for IPs (as opposed to DNSs)
- [T] Added a small delay after connecting, possibly preventing issues with some servers
- [T] Improved IPv6 support (hostname syntax is now equal to both other types of RedeemerTS3)
- Added IDN support for a TSDNS server’s hostname
- Fixed IDN support for TSDNS (supported only ASCII, but should support UTF-8/CESU-8 with BMP-only)
A:1.13.22 (14 Sep 2016)
A:1.13.23 / P:1.3.7 (12 Oct 2016)
- Added support for
snapshotdeployadded in 3.0.12
T:1.2.10 (20 Jan 2017)
- Added support changing what RedeemerTS3 accepts as a telnet prompt
Changes in static only (06 Feb 2016)
- Added IPv6 support to TSDNS() function
Changes in static only (07 Feb 2016)
- Fixed a bug that broke the TSDNS() function entirely (no hostname set, couldn’t properly test as I was on a train ride)