Right now, ZNC caches channel modes and will respond to MODE commands from the cache rather than forwarding it to the server (https://github.com/znc/znc/blob/master/src/Client.cpp#L1098). This causes issues if the channel modes that ZNC thinks are set doesn't actually match with what the server has set, and the design makes it impossible to re-synchronize what ZNC has without parting and re-joining the channel in question.
Right now, ZNC caches channel modes and will respond to MODE commands from the cache rather than forwarding it to the server (https://github.com/znc/znc/blob/master/src/Client.cpp#L1098). This causes issues if the channel modes that ZNC thinks are set doesn't actually match with what the server has set, and the design makes it impossible to re-synchronize what ZNC has without parting and re-joining the channel in question.
<!-- github-sync-id:1862519607 -->
Yes. For a concrete example, libera.chat has the +M mode which is only visible to opers. If you join a channel with it set but without being opered up, you will not see the mode. If you later oper up, a /mode command will start showing it, however due to this caching this never actually gets reflected in ZNC. Rejoining the channel will show it, but this is noisy.
One could make a compelling argument that the current behavior of the mode is broken server-side but it’d be nice to have some way to make this work despite that.
Yes. For a concrete example, libera.chat has the +M mode which is only visible to opers. If you join a channel with it set but without being opered up, you will not see the mode. If you later oper up, a /mode command will start showing it, however due to this caching this never actually gets reflected in ZNC. Rejoining the channel will show it, but this is noisy.
One could make a compelling argument that the current behavior of the mode is broken server-side but it’d be nice to have some way to make this work despite that.
<!-- github-comment-id:1690010293 -->
One could make a compelling argument that the current behavior of the mode is broken server-side
Yes, it is.
to have some way to make this work
You can use the *send_raw module to send MODE to server directly, ignoring all ZNC's logic
I can't find such mode at https://libera.chat/guides/channelmodes
What does it do?
> One could make a compelling argument that the current behavior of the mode is broken server-side
Yes, it is.
> to have some way to make this work
You can use the `*send_raw` module to send MODE to server directly, ignoring all ZNC's logic
<!-- github-comment-id:1690721423 -->
I arrived at the *send_raw method yesterday but would prefer something that happens automatically so I don't need to remember that ZNC plays games with channel data (such as a config option). Failing that, I suppose I could hook into OnUserRaw and just bypass it that way.
The mode is unfortunately undocumented. It prevents opers from being /kicked from the channels it's set in.
I arrived at the `*send_raw` method yesterday but would prefer something that happens automatically so I don't need to remember that ZNC plays games with channel data (such as a config option). Failing that, I suppose I could hook into OnUserRaw and just bypass it that way.
The mode is unfortunately undocumented. It prevents opers from being `/kick`ed from the channels it's set in.
<!-- github-comment-id:1690751745 -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Right now, ZNC caches channel modes and will respond to MODE commands from the cache rather than forwarding it to the server (https://github.com/znc/znc/blob/master/src/Client.cpp#L1098). This causes issues if the channel modes that ZNC thinks are set doesn't actually match with what the server has set, and the design makes it impossible to re-synchronize what ZNC has without parting and re-joining the channel in question.
Does server set some mode without telling ZNC about it?
Yes. For a concrete example, libera.chat has the +M mode which is only visible to opers. If you join a channel with it set but without being opered up, you will not see the mode. If you later oper up, a /mode command will start showing it, however due to this caching this never actually gets reflected in ZNC. Rejoining the channel will show it, but this is noisy.
One could make a compelling argument that the current behavior of the mode is broken server-side but it’d be nice to have some way to make this work despite that.
I can't find such mode at https://libera.chat/guides/channelmodes
What does it do?
Yes, it is.
You can use the
*send_rawmodule to send MODE to server directly, ignoring all ZNC's logicI arrived at the
*send_rawmethod yesterday but would prefer something that happens automatically so I don't need to remember that ZNC plays games with channel data (such as a config option). Failing that, I suppose I could hook into OnUserRaw and just bypass it that way.The mode is unfortunately undocumented. It prevents opers from being
/kicked from the channels it's set in.OnUserRawMessagewould work, yeahSolved via a module using
OnUserRawMessage, so just going to close this out.