IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#saltr
/2024/04/19
@RN
@eyedeekay
@orignal
+Unbur
+acetone
+cumlord
+profetikla
+snex
+uop23ip
+weko
An0nm0n_
Arch
DeltaOreo
FreefallHeavens
Irc2PGuest10483
Irc2PGuest2827393
Irc2PGuest33877
Irc2PGuest34200
Irc2PGuest6040
Irc2PGuest68850
Irc2PGuest70562
Leopold
Onn4l7h
Onn4|7h
ProRu
StormyCloudInc
Titlacahuan_
anon1
anu
dr|z3d
limak
not_bob_afk
poriori_
qend-irc2p
zzz2
orignal zzz, yes clock skew problem was fixed in 2.50.2
orignal 0.9.58 is hard to crash
orignal it contains that fix about endless recursion inside garlic
orignal it was actually deadlock but anyway
orignal here we go
orignal this commit is after 0.9.58
orignal all you need it is to send ratchets message to router rather than to destination
zzz good to know about the old clock skew bug. We definitely saw a lot of it last year
zzz I don't think I'll be sending death ratchets to china though...
zzz about 1700 unique routers seen so far
zzz 1 X
zzz 2 Xf
zzz 168 XfR
zzz 1 XfRD
zzz 19 XfRE
zzz 458 XR
zzz 37 XRE
zzz 991 XU
zzz 16 XUE
orignal before 0.9.58 it's even easier
orignal send a garlic message to router with garlic clove inside
orignal and it fall into deadlock mutex
orignal in 0.9.58 you need to send it with right timing
orignal i2pd XfRD? it means latest release
orignal we didn't publish D beofre
zzz only 1, probably not part of botnet
orignal then what is unique?
zzz unique router hash
zzz can't explain the one XfRD though, this is 0.9.58 only
orignal and you believe it's i2pd
orignal you mean unique in China?
zzz in general the botnet is i2pd. The one XfRD, maybe not
orignal how do you diferentite botnet? older version?
zzz X && China && 0.9.58
zzz a week ago: almost zero. Now: 1700
orignal but how you know that XU is China?
orignal since you don't see IP
zzz actual connected IP
zzz maybe some sort of GFW test to improve their classification
dr|z3d GFW test? on the chinese routers or?
zzz right, perhaps GFW ops deployed their own fleet, to test/improve classification/blocking
dr|z3d the simplest way would be a head request to anything blocked by the gfw.
dr|z3d (and wait for the reset packet)
zzz attempting to hack up a js audio play-all button for snark
dr|z3d don't we create a playlist from all the files already, or we just take one if it's there?
zzz yes for an external player
zzz but annoyingly I have a console pw so everything fails 401
zzz so let's try an in-browser solution
dr|z3d <script>
dr|z3d fetch('playlist.m3u')
dr|z3d .then(response => response.text())
dr|z3d .then(data => {
dr|z3d const audioUrls = data.split('\n').filter(line => line.trim().length > 0 && !line.startsWith('#'));
dr|z3d let currentAudioIndex = 0;
dr|z3d const audioPlayer = document.getElementById('audio-player');
dr|z3d function playNextAudio() {
dr|z3d if (currentAudioIndex < audioUrls.length) {
dr|z3d audioPlayer.src = audioUrls[currentAudioIndex];
dr|z3d audioPlayer.play();
dr|z3d currentAudioIndex++;
dr|z3d } else {
dr|z3d alert('Playlist finished!');
dr|z3d audioPlayer.addEventListener('ended', playNextAudio);
dr|z3d playNextAudio();
dr|z3d .catch(error => {
dr|z3d console.error('Error fetching playlist:', error);
dr|z3d </script>
zzz ewww
dr|z3d it's a rough and ready demo, the point being you can take a playlist and have the browser play it.
dr|z3d with something like that, you'd just add a button to the table header when the playlist is available and use it to trigger that script. problem sorted.
zzz I'm aiming for something a little less fugly
dr|z3d who cares if it's fugly. it only matters that it works and is robust.
zzz thought you were the original anti-fugly
dr|z3d well, I don't see that as particularly fugly. it can doubtless be improved, but it's not as bad as you're making out.
dr|z3d and there are two distinct classes of fugly. fugly that the user sees, and fugly that the user doesn't. I'm allergic to user-facing fugly :)
zzz I'm adding handlers to the <audio> events
dr|z3d whatever works, as long as it works :)
zzz on the details page
dr|z3d sure, only real place for them :)
dr|z3d personally I'd leverage the playlist, but it's your call.
zzz the m3u includes subdirs
zzz with your way there's no player visible, right?
dr|z3d That could probably be provisioned.
zzz thats why it's ui-fugly. there's no ui at all
dr|z3d I thought you were referring to the code itself.
dr|z3d so you want an inline audio player, or just an indication of what track's playing?
zzz I want to control all the players that are already there
dr|z3d ok, so each player in turn indicates when it's playing etc?
zzz yup
dr|z3d wouldn't hurt to additionally indicate in the table header the name of the currently playing track.
dr|z3d and what about sub-dirs? how are you going to manage those?
dr|z3d that's where you fall down, unless you're going to have the script jumping into snark's sub-dirs, and that truly is eww++
zzz this would be for current dir only. your way would work better for subdirs
dr|z3d something like this as a compromise:
dr|z3d <div id="current-track">Now Playing: </div>
dr|z3d <button id="playBtn">Play</button>
dr|z3d <button id="pauseBtn">Pause</button>
dr|z3d <button id="nextBtn">Next Track</button>
dr|z3d <script>
dr|z3d fetch('playlist.m3u')
dr|z3d .then(response => response.text())
dr|z3d .then(data => {
dr|z3d const audioUrls = data.split('\n').filter(line => line.trim().length > 0 && !line.startsWith('#'));
dr|z3d let currentAudioIndex = 0;
dr|z3d const audioPlayer = document.getElementById('audio-player');
dr|z3d const currentTrack = document.getElementById('current-track');
dr|z3d const playBtn = document.getElementById('playBtn');
dr|z3d const pauseBtn = document.getElementById('pauseBtn');
dr|z3d const nextBtn = document.getElementById('nextBtn');
dr|z3d function playNextAudio() {
dr|z3d if (currentAudioIndex < audioUrls.length) {
dr|z3d audioPlayer.src = audioUrls[currentAudioIndex];
dr|z3d audioPlayer.play();
dr|z3d currentTrack.innerText = `Now Playing: ${audioUrls[currentAudioIndex]}`;
dr|z3d currentAudioIndex++;
dr|z3d } else {
dr|z3d alert('Playlist finished!');
dr|z3d audioPlayer.addEventListener('ended', playNextAudio);
dr|z3d playNextAudio();
dr|z3d playBtn.addEventListener('click', () => {
dr|z3d audioPlayer.play();
dr|z3d pauseBtn.addEventListener('click', () => {
dr|z3d audioPlayer.pause();
dr|z3d nextBtn.addEventListener('click', () => {
dr|z3d playNextAudio();
dr|z3d .catch(error => {
dr|z3d console.error('Error fetching playlist:', error);
dr|z3d </script>
zzz wtf is chatgpt writing your code now
zzz the hybrid approach is messy
dr|z3d any approach is less than perfect. assuming the playlist is generated for all tracks, no just the tracks in the current dir, it may be a better approach. if each folder has its own playlist, then it doesn't much matter.
dr|z3d personally I'd prefer to see an in-browser playlist player contained in a div, with a single place to display the currently playing track, but each to their own.
zzz go for it, looks like chatgpt already wrote it for you ))
dr|z3d not on my list of priorities. happy with the playlist -> external player function :)
dr|z3d here's a thought though.. if accessing the tunes via the console is causing 401's when you have a password set, why not set the playlist to reference the files on the filesystem instead? should bypass any password issues.
dr|z3d check for console password, if set, swapout hrefs for file:// refs?
zzz different box
dr|z3d smb refs?
dr|z3d or maybe they *need* to be played in the browser. ok.
dr|z3d you could always generate the playlist with the password encoded into the urls.
zzz thought of that but that whole thing is deprecated and who knows which players would support it
zzz i have my events hung off the DOM, now just a debugging exercise
dr|z3d event delegation.. as close a parent to the target as you can get ensuring that the parent isn't subject to ajax refresh or whatever.
dr|z3d if you're attaching multiple event handlers to an element, it can help to attach them to different elements to aid debugging.
dr|z3d but you know all that.
zzz there's no ajax on details page
dr|z3d not in canon, anyways.
dr|z3d we never did get around to adding priority download preference for sub-dirs in snark, or a download percentage indicator. dunno if that's worth thinking about?
zzz imho any work on subdirs is a near-waste, they aren't common
dr|z3d they're common enough for things like collections, complete works, that sort of thing.
zzz sure, but below my threshold to put more work into
zzz 52 typos later, got it working more or less
zzz 52 typos later, got it working more or less
dr|z3d 52!!!
zzz and *poof* the china botnet shut down about 6 hours ago
snex i was hoping we could get some new podcast listeners :(