Brief overview of PR changes/additions

Summary

Implements full support for telnet:// links in Mudlet, allowing users to connect to MUD servers with a single click from browsers or other applications.

Usage Example

Users can now click links like:

<a href="telnet://aardmud.org:4000">Play Aardwolf MUD</a>
<a href="telnet://batmud.bat.org">Connect to BatMUD</a>

Or run from command line:

mudlet "telnet://testserver.com:2000"

Mudlet will:

  1. Parse the URI
  2. Find or create a matching profile
  3. Auto-connect to the MUD server

TESTING

I ran it on WEB and it worked fine. I ran it from command line, it worked fine

HERE IS A DEMO VIDEO : https://github.com/user-attachments/assets/143cc98a-3453-4bd9-bbe8-5b48c58db490

SEE LOGS: PS C:\Users\USER\Downloads\Mudlet-4.19.1-testing-pr8601-061d89a6-windows-64_5> .\mudlet.exe “telnet://aardmud.org:4000” mudlet::closeEvent(…) INFO - called! TMainConsole::closeEvent(…) INFO - received by “aardmud.org_4000”.“ffmpeg”. mudlet::saveWindowLayout() - Already-Saved: falseetected as the style factory in use - QPushButton styling fix applied! Host::saveProfile(…) INFO - called with no saveFolder or saveName arguments for profile ‘aardmud.org_4000’ so assuming it is an end of session save and the TCommandLines’ histories need saving… Registered Mudlet as telnet:// protocol handler TCommandLine::~TConsole(…) INFO - Saving profile’s own Hunspell dictionary… No change in the number of words saved in dictionary.t= “aardmud.org” port= 4000 mudlet::~mudlet() INFO - uninstalling translation…le: “aardmud.org_4000” QThreadStorage: entry 2 destroyed before end of thread 0x1d3f94c6b50 QThreadStorage: entry 1 destroyed before end of thread 0x1d3f94c6b50 protocols. Host::setDisplayFont(…) INFO - No TMainConsole to set font for - faking it Host::getDisplayFont() INFO - No TMainConsole to get font from - faking it Host::getDisplayFont() INFO - No TMainConsole to get font from - faking it TMainConsole::setSystemSpellDictionary(“en_US”) INFO - System Hunspell dictionary loaded for profile, it uses a “ISO8859-1” encoding… TMainConsole::setProfileSpellDictionary() INFO - Preparing profile’s own Hunspell dictionary… No change in the number of words in dictionary. “texttheme.cpp” @ 207 Theme not set: “Monokai” “texttheme.cpp” @ 207 Theme not set: “Monokai” mudlet::migratePasswordsToSecureStorage() INFO - no passwords found in profile data files to migrate. CredentialManager: Operation timed out Host::loadSecuredPassword() - Failed to retrieve password: “Operation timed out” TLuaInterpreter::loadUtf8Filenames() - patched Lua IO functions to work on Windows with UTF8 CredentialManager: Operation invalid - no callbacks set CredentialManager: Ignoring keychain callback - operation no longer valid dlgTriggerEditor::runScheduledCleanReset() WARNING - switch(EditorViewType) not expected to be called for “EditorViewType::cmUnknownView!” Host::loadMap() - restore map case 4. TMap::restore(“”) INFO: restoring map of Profile: “aardmud.org_4000” URL:

HERE IS THE SECOND ONE: PS C:\Users\USER\Downloads\Mudlet-4.19.1-testing-pr8601-061d89a6-windows-64_5> .\mudlet.exe “telnet://batmud.bat.org” PS C:\Users\USER\Downloads\Mudlet-4.19.1-testing-pr8601-061d89a6-windows-64_5> Discord integration loaded. Using functions from: “discord-rpc64.dll” mudlet::setupConfig() INFO: using config dir: “C:/Users/USER/.config/mudlet” main: Detected telnet URI: “telnet://batmud.bat.org” main(…) INFO - setting QT_MEDIA_BACKEND enviromental variable to: “ffmpeg”. mudlet::mudlet() INFO - ‘windowsvista’ has been detected as the style factory in use - QPushButton styling fix applied! mudlet::initializeAI() INFO: no model found, integration disabled. main: Registered Mudlet as telnet:// protocol handler mudlet::handleTelnetUri() - Processing telnet URI: “telnet://batmud.bat.org” mudlet::parseTelnetUri() - Parsed URI successfully: host= “batmud.bat.org” port= 23 mudlet::createProfileForUri() - Creating new profile: “batmud.bat.org” cTelnet::encodingChanged(“UTF-8”) INFO - Installing encoding for OOB protocols. Host::setDisplayFont(…) INFO - No TMainConsole to set font for - faking it mudlet::createProfileForUri() - Profile created successfully: “batmud.bat.org” mudlet::handleTelnetUri() - Auto-loading profile: “batmud.bat.org” Profile “batmud.bat.org” already loaded, skipping duplicate autologin CredentialManager: “No password stored in keychain” , trying fallback storage Host::loadSecuredPassword() - Failed to retrieve password: “Both keychain and encrypted file storage failed for credentials. Keychain: Password entry not found” mudlet::migratePasswordsToSecureStorage() INFO - no passwords found in profile data files to migrate. mudlet::closeEvent(…) INFO - called! mudlet::~mudlet() INFO - uninstalling translation… QThreadStorage: entry 2 destroyed before end of thread 0x202456d6d90 QThreadStorage: entry 1 destroyed before end of thread 0x202456d6d90

I STOPPED THE RECORDING A BIT EARLY HERE IS THE PROFILE LOADED: Screenshot 2025-12-01 010204

Motivation for adding to Mudlet

The bounty and to improve myself and contribute

Other info (issues closed, discussion etc)

/closes #689 /claim #689

Claim

Total prize pool $200
Total paid $0
Status Pending
Submitted December 01, 2025
Last updated December 01, 2025

Contributors

EX

Excellencedev

@Excellencedev

100%

Sponsors

MU

Mudlet

@Mudlet

$200