mIRC beta
Khaled
08/08/26 12:16 PM
The latest beta can be downloaded here and includes the following changes: Beta v7.84.1504 changes: 1.Item 8, websocket changes:
mIRC now initially sends: Sec-WebSocket-Protocol: binary.ircv3.net,text.ircv3.net
If a server replies with a HTTP/1.1 400 Bad Request, mIRC will retry without Sec-WebSocket-Protocol one more time. If that fails, it disconnects.
2.Item 9, added. 3.Item 10, added. 4.Item 11, added. 5.Item 12, added. 6.Item 13, added. IRCv3 features like this one require a client to store per-line meta-data for every client/server message/event. In this case, mIRC needs to store per-line meta-data for label, msgid, and +reply for every sent/received message in order to associate related messages.
You can see the label/msgid/+reply values in incoming/outgoing messages with /debug.
This beta will briefly highlight matching incoming/outgoing messages in a query/channel window. I am not sure how useful this is - it has been added as a visual aid to see the way it works. I may or may not keep it in a final release. It uses your "Highlight" color to tint the background color of matching messages.
Note: this beta enables echo-message only if labeled-response is available in CAP. Labeled-response is critical to making echo-message features work correctly.
Beta v7.84.1235 changes: 1.Item 8, websocket changes:
1) Added Sec-WebSocket-Protocol header to HTTP negotiation.
This beta now requests binary.ircv3.net for binary frames. If I understand correctly, this should allow the beta to send text that is not UTF-8 encoded. This allows the Options/Messages/UTF-8 enable/disable option to work and the per server codepage encoding option to work.
If the server replies with text.ircv3.net, mIRC will ignore its own UTF-8/codepage settings and will always encode text as UTF-8 and will use text frames.
2) Fixed bug relating to when Winsock cannot immediately send all of the bytes requested in a send(). This was not being handled correctly for websocket frames. This change affects non-websocket connections as well. This issue rarely happens, so I had to simulate/stress-test it.
3) Framed messages are now stripped of trailing CRLF characters since the websocket specification says they are not required. Some ircds strip these out by default but some may just report a malformed line.
4) Handling embedded CRLF in outgoing messages.
mIRC allows users to embed any number of CRLFs in single messages, eg. using /msg, /raw, etc. IRC servers just parse these as separate CRLF delimited messages.
On websocket servers, where each message needs to be framed, different ircd's behave differently if there are embedded CRLFs in a line.
When subprotocol text.ircv3.net is used:
1) Some ircds will disconnect / report a malformed line. 2) Some ircds chop the line at the first CRLF and process just the first part of the line. 3) Some ircds will split at CRLF and treat each line as a separate message.
When subprotocol binary.ircv3.net is used: 1) Some ircds will disconnect / report a malformed line. 2) Some ircds will strip out CRLFs and treat the whole line as a single message. 3) Some ircds will split at CRLF and treat each line as a separate message.
The 3rd behaviour would be ideal for a client for a number of reasons. However, currently, the only way to achieve consistent behaviour across irds is:
This beta splits outgoing lines by CRLF before sending them individually to the server. Technically, on a non-websocket server, this should make no difference. On a websocket server, each of these lines will now be in its own frame.
Beta v7.84.1148 changes: 1.Item 1, fixed. 2.Item 2, fixed. 3.Item 3, changed. 4.Item 4, fixed. 5.Item 5, changed. Previous versions did not validate ports entered into the servers dialog. Entered ports are now parsed, checked, and discarded if not valid eg. comma separated ports, ranges N-N, + and * prefixes, and values 1 - 65535, duplicates, etc. 6.Item 6, added. 7.Item 7, updated. 8.Item 8, added websocket support.
Adding Websocket support initially looked like it would be reasonably straightforward. It ended up snowballing and affecting a large number of features and required significant work and testing. I attemped several different approaches and settled on the current implementation. The aim was to make websocket support as transparent as possible to the user. Enter a websocket address as a server address, click connect, and it should just work.
The following items cover the main issues/challenges:
1) Integrating websocket connections into mIRC's existing connection handling, DNS resolution, and so on.
I had originally planned to use an established, well-tested WebSocket C/C++ library. However, after trying out several popular libraries, it became apparent that integrating these into mIRC's own connection code would be complicated. I ended up implementing my own websocket code that integrates directly with mIRC's existing socket code with as few changes as possible to existing code while maintaining the same sequence of parsing, events, logging, scripting, etc.
You can use "/debug on" to see the initial websocket negotiation. While this is not technically necessary for debug.log, I wanted to include it so that we can see that mIRC is attempting a websocket connection. After the negotiation, messages are extracted from websocket frames and saved to debug.log, ie. without the websocket frame data, the same as standard connections.
If mIRC connects to a port that does not support websockets: every ircd behaves differently. mIRC will always check to see if the first reply from a server is HTTP. If it is not, it assumes that the message is a standard IRC server message and defaults to a standard non-websocket connection. For example, if you try to connect to ws://testnet.ergo.chat:6667, it will reply with:
:testnet.ergo.chat 400 GET :This is not an HTTP server
And the server will close thc connection. If you try to connect to ws://testnet.inspircd.org:6667, the server ignores the HTTP negotiation and replies with NOTICEs. Some servers will disconnect since they treat the attempted HTTP negotiation as an error.
2) The use/handling of websockets across features.
Websocket addresses use the prefix ws:// for plain connections and wss:// for secure connections. They can also include a port/path:
wss://testnet.ergo.chat:+443/webirc
The ws:/wss: is problematic because it uses a colon, which many features parse as a port number separator in the address.
The path is problematic because it means it is no longer just a hostname and cannot be parsed by the hundreds of features and functions in mIRC that expect a hostname.
A lot of work went into ensuring that all features continue to see only see the hostname unless they need the websocket address. The websocket address is only used in specific situations, such as when performing the websocket negotiation, editing the address in the server dialog, etc. In all other situations, eg. DNS resolution, GUI display, etc. it is just a hostname.
For scripts, this is also a tricky issue, eg. a) $server continues to return a hostname since its value is dependent on a hostname that can change during the connection process, eg. round-robin address changes to actual address once connected and numeric is received. b) $servertarget now returns the websocket address if set. c) $server().addr now returns the websocket address if set. d) Other features should continue to return a hostname.
3) Server address cycling.
If you try to connect to a server address, mIRC will look it up in your servers list, find its group name, and cycle through the list of servers/ports for that group.
Nowadays, servers.ini only includes a single round-robin address per network, however the server cycling process is still in place.
I have had to update a number of routines to match on the websocket address instead, if one is defined for a server/connection.
4) Handling port numbers.
If you enter the above websocket address into the address editbox in the servers dialog and then press the OK or tab key:
a) The ws:/wss: prefix will be removed as it is not needed and conflicts with the port editbox settings for SSL/non-SSL which can contain a list of ports. b) The port number will be automatically extracted and placed into the ports editbox. A port in the address will always override any items in the ports editbox. c) If no port is specified, a default of 80/+443 is used. The 80/+443 port default is used in many contexts if a websocket is in use instead of the standard 6667/+6697 default.
5) Storing websocket addresses in servers.ini.
I tested several methods, some of which preserved ws:/wss:, or stored the websocket address/path as a separate item. I eventually settled on the format described below.
n1=Random serverSERVER://testnet.ergo.chat/webirc:+443GROUP:Ergo
The ws:/wss: prefixes are removed because 1) their use of a colon breaks backward compatibility with older vesions of mIRC which will mangle servers.ini if it is used, and 2) they conflict with the port number setting which can be a list of SSL/non-SSL ports.
The prefix // is used to identify a connection as a websocket.
Storing/parsing IPv6 addresses was another complication. mIRC will parse IPv6 addresses, adding/removing [] brackets in different contexts as needed, eg. brackets are needed during HTML negotiation, they are not needed when connecting a socket, and so on.
6) Handling ws:/wss: as chat links. These are now registered and handled by mIRC, just like irc:/ircs:, and ws:/wss: are now also parsed on the command line.
7) Parsing of IRC numeric 10 now checks for ws:/wss: links, so a server can redirect a client to a websocket connection if it needs to.
8) STS/SSL Cache/etc.
The SSL cache continues to use the host name as this is taken from the SSL certificate.
The STS port is saved using the websocket address, which needs to match against the websocket/non-websocket connection type.
Websocket support required changes to 50+ files relating to everything from GUI, scripts, connections, port handling, address parsing, in addition to the new code for websocket handling. It has been tested using InspIRCd locally and with the following websocket servers:
wss://testnet.inspircd.org:8097 wss://testnet.ergo.chat/webirc wss://irc.unrealircd.org
As this is the first release with websocket support, and it has been through many iterations/changes, there will likely be bugs. Please let me know if you spot any issues.
Changes: 1.Fixed display of numeric 344 whois reply on InspIRCd. 2.Fixed various issues relating to 64-bit/ARM64 in preparation for a future 64bit release. 3.Changed STS support to allow previously accepted invalid certificate. 4.Fixed hotlink parsing to strip trailing . periods from an address. 5.Changed how server ports are parsed to ensure that only valid port number formats/ranges/prefixes are accepted. 6.Added Alt+D key combination to the Connect dialog that allows you to delete a server easily but with a confirmation dialog. 7.Updated libraries to TagLib v2.3.1. 8.Added support for WebSocket connections. You can now enter a websocket address, prefixed with ws: or wss:, as a server address and mIRC will connect to that server using websockets. 9.Added IRCv3 EXTBAN/ACCOUNTEXTBAN support to /ban and $ibl().
Added /ban -a switch that will check the IAL for a nick's account name and will apply the EXTBAN/ACCOUNTEXTBAN prefixes to ban/unban the account. If no account is found, it applies a wildcard ban.
Add $ibl() properties .prefix, .mask, and .account which parse and return values relating to the banned address/account. The .account property uses the ACCOUNTEXTBAN prefixes to identify and extract the account name.
10.Added /server -ircv3 [tokens] switch that allows you to set no-implicit-names[=0|1] when connecting to a server. This setting remains in place for a status window until changed. 11.Added support for IRCv3 context-chan message tag. When a message has this tag, PRIVMSG and NOTICE will be re-routed to that channel, but only if existing settings and/or open windows do not override it. 12.Added support for display of numerics 697/698 in channel window. 13.Added support for IRCv3 +reply. In a channel window, if you prefix a message with "nick:" and the last message from that nick has a msgid, your message will use that msgid in +reply when it is sent. mIRC will also check received messages for +reply and will briefly highlight related messages in the same window.
1
466,370
Read More
|
|
Writing C Code, DCC's Always Fail Midway
Climbatiz
30/07/26 04:08 PM
i'm writing a dcc bot for IRC in C, and no matter how hard i've tried i can't seem to make it work for mIRC, it works sending to every other client, but when i send files to people using mIRC the send fails midway into the transfer, do i need anything specific to send to mIRC clients or something?
0
63
Read More
|
|
Secure Password Storage
rexbinary
26/07/26 08:27 PM
Hello,
Would you please consider adding support for retrieving server and SASL passwords from Windows Credential Manager, including passwords referenced by scripted /server commands. This would allow remote.ini and other scripts to remain portable without containing credentials in plain text.
Examples:
/credential get libera
/server ... -l sasl ... -password-credential libera
Thank you!
0
97
Read More
|
|
Re: On Join
Simo
14/07/26 12:40 PM
I reckon you use unrealircd right? First i would detect for the country when they connect to the ircd and store that along with the nick so when they join channel you check against that and echo it to yourself to check if it's proper, the only thing is when they change nick before joining channels that might not work or you have to find a solution for that scenario to work as well.
1
449
Read More
|
|
Re: Request ban script particular...
Simo
14/07/26 12:32 PM
It's called an extended ban, since it's account based perhaps the IRCV3 account tag can be used for that but i haven't used it before myself so i can't tell you how to do that.
12
8,611
Read More
|
|
Re: different non-iso symbols starting with v7.83
pranza
06/07/26 05:44 PM
thanks for a detailed insight into the issue! well, i don't know, i'm back at v7.82 and it displays fine as in chat prompt, so in chat window. i've no idea why MSwindows decided to treat that chat prompt encoding differently in v7.83 and v7.84, but that's what it is.. O_o
2
523
Read More
|
|
Re: 7.84 being flagged as Malware
Khaled
26/06/26 08:30 AM
Thanks, this is the usual post-release issue where security vendors need to update their virus definition files. It happens with every new release. Seeing only three security vendors with false-positives is actually quite good on a new release. A bigger issue is Microsoft's SmartScreen, which depends on reputation. Windows will literally need to see a file in wide use and declared as safe by enough people to accept that it is a safe file. mIRC users can click feedback to submit feedback to Microsoft.This new release uses Microsoft Azure Artifact Signing to sign the executable and, from what I understand, consistent use of this will contribute to SmartScreen reputation over time. So hopefully this will make future releases retain reputation. For users that report this: If you have recently downloaded the latest version of mIRC from the official mIRC webstite, and you are seeing a warning from a security vendor, this is usually due to a false-positive which happens when an anti-virus company updates their virus definition files without checking them properly or is slow to update them after a new release of mIRC. The result is that the anti-virus software starts incorrectly detecting some applications or files as trojans or viruses. Unfortunately this happens all the time. You would need to contact your anti-virus software company to report the issue and to ask them for a solution. They should then correct the error in the next update of their virus definition files and should be able to tell you how to prevent their software from behaving this way in the meantime. In addition, some anti-virus applications are more sensitive to IRC applications than others and will actively block/delete their files. You would need to add mIRC to their exclusion list to get around this. If that does not work, you would need to contact the anti-virus company for help. You could also try uploading your mirc.exe to https://www.virustotal.com to check it. There will usually always be a small number of security vendors that think a file has a virus/trojan, especially after a new release, but this is usually resolved by them after some time.
1
580
Read More
|
|
mIRC 7.84 released
Khaled
23/06/26 12:52 PM
Dear mIRC User, mIRC v7.84 has been released today. This is a small update that adds features and addresses a number of issues reported by users since the last release. It also includes bug and security fixes for various libraries, such as OpenSSL. Changes in this version include: Added custom dialog editbox option 'optional' for grayed out optional text. Fixed DirectShow temporary wave file not being deleted on exit. Changed $urlget() to retry a connection without compression in the event of an error. Updated code signing certificate to use Azure Artifact Signing. Fixed menubar display bug when in dark mode. Fixed /server -a not preserving existing entry's codepage. Fixed Address Book nick colors "idle time" display bug. Changed installer to no longer require administrator access on startup. Added support for displaying an MDI window's System menu when right-clicking its titlebar. Updated libararies to OpenSSL v3.5.7, TagLib v2.2.1, Zlib v1.3.2, and ADA v0.5.5. Updated CA root certificates cacert.pem file. How to upgrade?mIRC is distributed in an installer that installs mIRC on your computer for you. Simply download and run the installer from the download page on the mIRC website. Follow the instructions the installer gives to you. When upgrading all your old settings and scripts will stay as they were, if you want that. Read the questions the installer asks with care and nothing can go wrong. You will be chatting with the new mIRC in no time. If you get stuck or if you want to find out more about a certain feature, just click on a Help button or browse the Help file and you should find lots of hints to help you out. Where to download?As always, the latest version of mIRC can be downloaded from the download page on the mIRC website. Registering mIRCAs you know, mIRC can be downloaded freely and evaluated for 30 days. If you find that you enjoy using mIRC, it would be great and much appreciated if you registered your copy. This licenses you to use your copy of mIRC and helps to support our continued work on mIRC. You can find out how to register here. Full list of Fixes, Changes and Additions.For a more detailed list of recent changes, please see the whatsnew.txt file. You will need to read through the help file to learn more about these changes and their impact. Some changes are obvious, some need getting used to - please take your time to play with them and see how they work. May we invite you to use these forums for all questions you might have? The forums offer great help with everything related to mIRC! Thanks for using mIRC, have fun on IRC!
0
1,706
Read More
|
|
Re: Checkboxes in dialogs
FiberOPtics
08/06/26 09:14 PM
Hi there, try this example
dialog new_table {
title "New Project"
size -1 -1 251 161
option dbu
; "text", id, x y w h, style (left, push, 3state)
check "Check Box", 1, 8 15 50 10
check "Check Box", 2, 8 35 50 10, 3state
check "Check Box", 3, 8 55 50 10, left
check "Check Box", 4, 8 75 50 10, push
}
If you omit the style it will default the checkbox on the left and text on the right. Same with the 3state.
1
451
Read More
|
|
Kiwi IRC - Connecting
SkillsPino
05/06/26 06:21 PM
Hey,
I've been a Mac user for a long time and have been using Colloquy and found it very easy to use. I've changed jobs and now I'm on a Windows computer and I don't have admin permission, so I can't download mIRC. I grew up using mIRC, so I was looking forward to trying it again. But because it's an exe I can't install it. So I've tried using KIWI IRC web client, but when I try and login to any server, I just can't connect. It's asking for login/password, which I don't think I have as I never had to use it for the servers I was on before. And when I did some troubleshooting myself, it seems like the only way to register a nickname, is by getting onto the IRC server, which I can't do.
Long story short...anyone know how I go about getting on abjects through Kiwi IRC?
Thanks!
0
401
Read More
|
|
Re: GIF handling speed
Wims
11/05/26 01:17 PM
Currently, each time the script is executed, the image is cached again using /drawpic -cp, even though it may have been cached before and there is no need to do so. The -p switch is already checking whether or not the frames have been cached.
9
2,119
Read More
|
|
Changing the position of an ID
TECO
07/05/26 03:50 PM
Hi Khaled mIRC offers the option to customize the size of a dialog box after it has been opened, using the following command: But there is no command to change the position of text, edit, button, check, radio, box, scroll, list, combo, icon, and link. A new command could be created, such as: So that we can position the dialog content after it has been opened. When we need to create custom dialogs, sometimes we have to repeat several OK, Cancel buttons, or edit boxes or combos to position them in the desired location, when using the command /dialog -s name x y w h.
0
171
Read More
|
|
Re: Style editbox enable/disable
TECO
27/04/26 04:23 PM
The only way I found that works and solves the problem is this: alias test { dialog -m test test }
dialog test {
title ""
option pixels
size -1 -1 250 99
check "Enable", 1, 12 15 50 16
edit "", 2, 10 32 230 21, disable autohs
button "&OK", 4, 164 66 76 23, ok default
}
on *:dialog:test:*:*:{
if ($devent == sclick) {
if ($did == 1) {
if ($did($did).state) { .timeroff off | did -ve $dname 2 }
else { did -h $dname 2 | .timeroff -h 1 190 did -bv $dname 2 }
}
}
}
However, this is not a perfect solution and may fail in some circumstances.
7
1,671
Read More
|
|
Re: GIF images not being recognized.
Epic
18/04/26 07:01 AM
I am now off to have a nice morning walk in the park with my dog :-) Will there be a photo shoot with your dog, taken during that nice morning walk in a beautiful park? :-DPreferably It is advisable to combine everything into one GIF file, so we can play the animation in mIRC using the code: #Post273892
16
5,632
Read More
|
|
Display/show gif -- /drawgif
Wims
17/04/26 09:57 PM
This code can be used to show a gif in a picture window, it auto loops and auto clean itself if you close the window:
To create/initiate the gif, use $drawgif(@win,x y,filename,cbalias,w h,customdelay) It will return an ID value which can then be used to pause, resume, and delete the gif animation
pause: /drawgif -p <id> resume: /drawgif -r <id> delete: /drawgif -d <id>
'cbalias' is a callback alias called when the gif is finished, if not specified, the gif auto loops, if specified, the alias is called as an identifier, if you return something non-0 (non-$false and non-$null), it auto loops. 'w h' can be used to strech/squeeze into that bitmap size 'customdelay' will ignore the gif's delays and use that constant time (millisecond) between frames.
alias drawgif { if ($prop) { var %h drawgif $+ $1,%f $hget(%h,frame),%delay $hget(%h,cdelay) if (%delay == $null) %delay = $pic($hget(%h,filename),%f).delay if ($hget(%h,wh)) drawpic -os $hget(%h,wxy) $v1 %f $hget(%h,filename) else drawpic -o $hget(%h,wxy) %f $hget(%h,filename) .timerdrawgif $+ $1 -ho 1 %delay noop $!drawgif( $1 ).draw if ($calc(%f + 1) >= $pic($hget(%h,filename)).frames) { if ($hget(%h,cbalias)) { if ($($+($,$v1,$chr(40),$1,$chr(41)),2)) hadd drawgif $+ $1 frame 0 else { .timerdrawgif $+ $1 off hfree drawgif $+ $1 } } else hadd drawgif $+ $1 frame 0 } else hinc drawgif $+ $1 frame return :error if (*invalid window* iswm $error) { reseterror .timerdrawgif $+ $1 off hfree drawgif $+ $1 return } } if ($$1 === -p) .timerdrawgif $+ $$2 -P elseif ($$1 === -r) .timerdrawgif $+ $$2 -r elseif ($$1 == -d) { .timerdrawgif $+ $$2 off hfree drawgif $+ $2 } else { var %t $ticksqpc hadd -m drawgif $+ %t wxy $1-2 hadd drawgif $+ %t frame 0 hadd drawgif $+ %t filename $3 hadd drawgif $+ %t cbalias $4 hadd drawgif $+ %t wh $5 hadd drawgif $+ %t cdelay $6 .timer -ho 1 0 noop $!drawgif( %t ).draw return %t } }
Example
alias mayo { window -depo @test 0 0 800 900 echo -sg $drawgif(@test,0 0,C:\Users\Ouims\Downloads\gm1.gif,gifend) } alias gifend echo -sg gif ended | return 1
0
350
Read More
|
|
mIRCHub - A github alike but for mIRC Scripting
Piratoshi
10/04/26 02:45 PM
Hello everyone. Hello Khaled!
I was thinking, mIRC came from a time when communities like github didn't exists yet. But considering now we have such tools avaliable, wouldn't be cool to have a github alike but for mIRC Scripting code only?! a mIRCHub, similar to github. And if it would be possible to upload our scripting codes to this mIRCHub directly from a button in the "Scripts" dialog in mirc.exe So we can keep code updated on mIRCHub sync to our scripting in mIRC.exe I feel that we as a community would benefit a lot from a virtual place where we all can share our mIRC scripting codes if we want to as we edit them in our mIRC client. What do you all think about this idea?
btw, have a good weekend 🕺
0
486
Read More
|
|
Re: Horizontal scroller incorrectly sized
Khaled
04/04/26 12:54 PM
Thanks for your bug report. This is actually by design. There are sanity checks with arbitrary limits like this one in most features in mIRC. In this case, the maximum scrollable horizontal width for any listbox is 9999 pixels. It could be increased to a maximum of 32767/65535 (depends on the Windows version), however considering the limit has been in place for decades, it's not something I would consider changing at this point.
1
478
Read More
|
|
|
|