00:00 <+bridge> [ddnet] Our current RUS hoster has quite cheap dedicated servers, can get one for ~40 € / month: https://en.ihor.ru/dedic#cfgMTIzNDU2Nzg5MDs0OzA7MTswOzA7MDswOzMwOzE7MDsxOzE7ODswOzA7NTswOzA7MTswOzA7MTsxMDAwOzEwMA== 00:00 <+bridge> [ddnet] u pay once and they just mail you the physical server 00:00 <+bridge> [ddnet] that'd be.... €802 for the gold one? 00:01 <+bridge> [ddnet] @Soreu yeah 00:01 <+bridge> [ddnet] Hm, even if we use it for 8 years, it'll come out to 100e per year, not a great deal for a server of that size 00:02 <+bridge> [ddnet] @deen 40e a month is rather expensive, no? I don't think any of our servers including ger2 cost that much 00:02 <+bridge> [ddnet] Yeah, but they promise "forever" 00:08 <+bridge> [ddnet] We could try yet another OVH vps in Warsaw as an alternative/addition to RUS 00:11 <+bridge> [ddnet] > @TortiLeq we can always debounce it a little, like only kill servers if they are empty for a while 00:11 <+bridge> [ddnet] @Learath2 is have sense 00:11 <+bridge> [ddnet] Hasn't OVH let us down each time we tried it? Even with a dedicated server 00:12 <+bridge> [ddnet] yeah 00:12 <+bridge> [ddnet] they have 😄 00:12 <+bridge> [ddnet] somehow others report good experiences with them, maybe it's our fault 00:13 <+bridge> [ddnet] For lower costs we can set up ddnet servers on new energy save devices but... who have enough money? Konsti? 00:13 <+bridge> [ddnet] I have literally no idea how to compare VPSes, all the sites have these fancy empty promises like "Protects against 10 Gbit/s DDoS" 00:13 <+bridge> [ddnet] They are joking i think 00:14 <+bridge> [ddnet] They want to earn more money by clickbating 00:15 <+bridge> [ddnet] @deen OVH always touts their Additional 3 Tbps network 00:15 <+bridge> [ddnet] But yeah now its not very important. Most important is DoS and ddos topic... 00:16 <+bridge> [ddnet] Easy to say :banhammer: ddosers but really hard to do 00:27 <+bridge> [ddnet] @deen i hope i can sponsor that host from september 00:27 <+bridge> [ddnet] since i found a job that takes me :kek: 00:27 <+bridge> [ddnet] half a year worth searching jobs 00:28 <+bridge> [ddnet] the people who say OVH are good are the ones who work for them 00:28 <+bridge> [ddnet] @onby I knew u worked at OVH 00:33 <+bridge> [ddnet] how much would cost hosting with actual DDoS protection? 00:36 <+bridge> [ddnet] Honestly, ddos protection is mostly about having a large enough bandwidth and being able to efficiently drop garbage traffic 00:36 <+bridge> [ddnet] I think even if we had a large enough bandwidth, the teeworlds networking code is just not up to par for dropping the traffic quickly enough 00:37 <+bridge> [ddnet] Maybe with a stateful eBPF filter we can do bette 00:37 <+bridge> [ddnet] r 00:38 <+bridge> [ddnet] <ᶰ°Konͧsti> Ask google to host tw servers 00:39 <+bridge> [ddnet] Now that'd be cute 00:39 <+bridge> [ddnet] I was thinking of trying a cloud hoster like linode or digitalocean actually 00:39 <+bridge> [ddnet] They have rather nice bandwidth promises and I'm wondering if they'd actually null-route us for using like 1-2gbps 😛 00:41 <+bridge> [ddnet] if that hosting is above 100 Euroes, im not gonna pay for that lmao 00:41 <+bridge> [ddnet] i really wish to support that 00:41 <+bridge> [ddnet] <ᶰ°Konͧsti> Just delete ddosers from life 02:02 <+bridge> [ddnet] dont merge 02:02 <+bridge> [ddnet] its wrong 02:04 <+bridge> [ddnet] maybe this guy only wants to appear in the credits 02:10 <+bridge> [ddnet] @Ryozuki if you can take the time, could you say why it is wrong (and if you assume that he's still using gtranslate, perhaps tell him that translations using that are mostly useless) 02:10 <+bridge> [ddnet] no i wont, i dont want to teach spanish 02:10 <+bridge> [ddnet] ill simply correct it tomorrow 02:11 <+bridge> [ddnet] any sane spanish speaker can clearly see this is wrong 02:12 <+bridge> [ddnet] "Restablecer arma deseada en muerte" -> "Restablecer el arma deseada al morir" 02:12 <+bridge> [ddnet] its so wrong 02:12 <+bridge> [ddnet] I've never taken a spanish class, I really can't tell 02:12 <+bridge> [ddnet] sorry 02:12 <+bridge> [ddnet] then just close the PR and tell him one wrong grammar usage 02:12 <+bridge> [ddnet] well its mostly missing articles and correctly conjugatin the verbs 02:13 <+bridge> [ddnet] hm 02:13 <+bridge> [ddnet] idk if articles is a word 02:13 <+bridge> [ddnet] articles is a word 02:13 <+bridge> [ddnet] the word class of "the" in english 02:13 <+bridge> [ddnet] and "a" 02:13 <+bridge> [ddnet] ye 02:41 <+bridge> [ddnet] 1- about the merge. I just follow the instructions on the ddnet page. I have no idea how to use github so I created another pull request to fix the errors in the grammar. 02:41 <+bridge> [ddnet] 02:41 <+bridge> [ddnet] 2- How many errors were there? 02:42 <+bridge> [ddnet] @Ryozuki 1- about the merge. I just follow the instructions on the ddnet page. I have no idea how to use github so I created another pull request to fix the errors in the grammar. 02:42 <+bridge> [ddnet] 02:42 <+bridge> [ddnet] 2- How many errors were there? 07:45 <+bridge> [ddnet] <ᶰ°Konͧsti> Fix updating mapinfos like mapper 07:53 <+bridge> [ddnet] what's wrong with mapinfos? 09:28 <+bridge> [ddnet] @deen you sure that it was correct to delete the cldefaultzoom stuff in camera::onreset? 09:28 <+bridge> [ddnet] just by looking at the code it seems like it should be still broken 09:29 <+bridge> [ddnet] but mh, it seems to work 09:29 <+bridge> [ddnet] but defaultzoom - 10 is -1 in my case, my default zoom is 9 09:44 <+bridge> [ddnet] @deen tried updating 3 months a mapper name through django it never worked 09:46 <+bridge> [ddnet] @deen tried updating ~3 times a mapper name through django it never worked 10:42 <+bridge> [ddnet] @FeaRZ please only update languages that you speak fairly well 10:42 <+bridge> [ddnet] it's annoying to have to go through all strings to check whether the grammar is still okay, whether they fit the context and whether they fit into the space allocated for them 10:44 <+bridge> [ddnet] Maybe set default zoom to 9 on fng 10:44 <+bridge> [ddnet] Hehe 10:46 <+bridge> [ddnet] omg 10:46 <+bridge> [ddnet] @deen 10:46 <+bridge> [ddnet] @heinrich5991 10:46 <+bridge> [ddnet] his french translations are also rly wrong 10:46 <+bridge> [ddnet] idk if u pulled it already 10:46 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/730706452326383666/unknown.png 10:46 <+bridge> [ddnet] he basically changed "mouse sens" to "mouse direction" 10:46 <+bridge> [ddnet] https://github.com/ddnet/ddnet/pull/2473 10:47 <+bridge> [ddnet] aight 10:47 <+bridge> [ddnet] and the "grammar" mistakes he fixed are also wrong 10:47 <+bridge> [ddnet] https://github.com/ddnet/ddnet/pull/2473/commits/4e2ea9753147de0d2d0b5b9c9d61df5e6cedd2bc you could judge whether my imperfect french skills were okay enough for this one change 10:47 <+bridge> [ddnet] i.e he removed every space before punctuations 10:47 <+bridge> [ddnet] but in french we actually have space before these.. 10:47 <+bridge> [ddnet] ye, I know, that's how I realized something was off 10:48 <+bridge> [ddnet] Sens. de la souris could work, but wouldn't fit either 10:48 <+bridge> [ddnet] yeah its not perfect but it makes sens 10:48 <+bridge> [ddnet] the . shows the word isnt "sens" 10:48 <+bridge> [ddnet] yeah its not perfect but it makes sense 10:48 <+bridge> [ddnet] but yeah at that point just write the entire word "sensibilité" 10:49 <+bridge> [ddnet] Doesn't fit anyway, and omitting "de la" there shouldn't matter much 10:50 <+bridge> [ddnet] Well I'm no native speaker, so I wouldn't touch any of the translations anyway 😄 11:13 <+bridge> [ddnet] @Learath2 @heinrich5991 i made some changes to my own bridge server, including learaths repackmsg function, but that also removed the packing in message.h, which is now failing my ex.cpp test (by heinrich) 11:13 <+bridge> [ddnet] what should i do about it? just remove the test like ddnet? 11:13 <+bridge> [ddnet] https://github.com/fokkonaut/F-DDrace/runs/853167159 11:52 <+bridge> [ddnet] @Learath2 :/ why did you remove the test? ^^ 11:54 <+bridge> [ddnet] well if it fails 🤔 11:59 <+bridge> [ddnet] @heinrich5991 i think its gone since a long time already 12:00 <+bridge> [ddnet] yea i dont know, i just noticed there is no ex.cpp 12:08 <+bridge> [ddnet] Can you take a look at how to fix the test tho? 12:13 <+bridge> [ddnet] hm. it seems there never was a src/test/ex.cpp(?) 12:13 <+bridge> [ddnet] git log -- src/test/ex.cpp shows nothing 12:14 <+bridge> [ddnet] lol 12:14 <+bridge> [ddnet] then you didnt add it to ddnet xD 12:14 <+bridge> [ddnet] i got it from cherry picking your commit you did to ddnet7 12:14 <+bridge> [ddnet] will you add the test to ddnet? 12:19 <+bridge> [ddnet] I know how to make better ddos protection. Just use better internet. Not 1GiB/s. 12:21 <+bridge> [ddnet] @heinrich5991 i removed a test? 12:21 <+bridge> [ddnet] no 12:21 <+bridge> [ddnet] no 12:21 <+bridge> [ddnet] sorry 12:21 <+bridge> [ddnet] @TortiLeq the teeworlds networking code cant deal with 1 gbit of traffic either 12:21 <+bridge> [ddnet] just throw better nonexisting cpus at it 12:21 <+bridge> [ddnet] heinrich, will the ex test be added? 12:22 <+bridge> [ddnet] or why did it not exist? 12:22 <+bridge> [ddnet] We could deal with it if we utilized extra cores better 12:22 <+bridge> [ddnet] One of our first GER server was 10 Gbit/s, but they kicked us out because of DoS attacks anyway 12:22 <+bridge> [ddnet] I love how they let u have 10gbit as long as you dont use it all 12:22 <+bridge> [ddnet] Thanks my man 12:22 <+bridge> [ddnet] did you add the non-reflection measures back then? 12:22 <+bridge> [ddnet] no 12:22 <+bridge> [ddnet] otherwise we might have been kicked off because we were DoSing others 12:23 <+bridge> [ddnet] nono, it was because of the incoming traffic causing problems for other customers 12:23 <+bridge> [ddnet] ok 12:23 <+bridge> [ddnet] hm 12:23 <+bridge> [ddnet] the 10 Gbit/s was shared, not exclusive for us anyway 12:23 <+bridge> [ddnet] Ah 12:24 <+bridge> [ddnet] I noticed some hosters have 4.5 GHz CPUs, might be less work to switch to something like that instead of using multiple threads for netcode 12:26 <+bridge> [ddnet] @fokkonaut probably not because I don't want to port the test right now 12:26 <+bridge> [ddnet] ok 12:26 <+bridge> [ddnet] if i want to remove it, can i just delete the ex.cpp file? 12:27 <+bridge> [ddnet] yes, and delete it from CMakeLists.txt 12:27 <+bridge> [ddnet] ye 12:27 <+bridge> [ddnet] @Patiga https://discordapp.com/channels/252358080522747904/293493549758939136/730723604303577188 congratulations, you predicted the outcome 12:37 <+bridge> [ddnet] @deen i wonder if we would benefit from the extra single core speed 12:37 <+bridge> [ddnet] I guess we would as we probably arent having a bottleneck in the kernel yet 12:38 <+bridge> [ddnet] sometimes we do get a kernel bottleneck 12:38 <+bridge> [ddnet] when there is a large attack with many small packets on a single server 12:38 <+bridge> [ddnet] recvmmsg helps a bit 12:38 <+bridge> [ddnet] Yeah the kernel can only do so many packets per second per core, I'm not sure if that scales well with the core speed 12:39 <+bridge> [ddnet] We should get a high performance networking enthusiast hooked on ddnet :D 12:41 <+bridge> [ddnet] It'd also be nice if we could have access to a high powered firewall where we can drop things with ebpf filters before it even reaches us 12:43 <+bridge> [ddnet] @deen one problem with #2482 is that you cant explicitly set values to default 12:43 <+bridge> [ddnet] https://github.com/ddnet/ddnet/pull/2482 12:44 <+bridge> [ddnet] I implemented it the same way, then I implemented it with an extra bool inside the config but that doesmt work with the direct way we modify configs in the settings menu 12:45 <+bridge> [ddnet] @snail u need to rename mapper in other places too, not only django 12:49 <+bridge> [ddnet] > @TortiLeq the teeworlds networking code cant deal with 1 gbit of traffic either 12:49 <+bridge> [ddnet] @Learath2 so we can make teeworlds more safer for ddos 12:50 <+bridge> [ddnet] Cant* 12:50 <+bridge> [ddnet] > @TortiLeq the teeworlds networking code cant deal with 1 gbit of traffic either 12:50 <+bridge> [ddnet] @Learath2 so we cant make teeworlds more safer for ddos 12:59 <+ChillerDragon> yo @deen trafilaw told me you know what this wordlist.txt is 13:00 <+ChillerDragon> how does it work what does it do and who loads this file? 13:00 <+bridge> [ddnet] When you save and the save code exists or you have an empty save code, 3 words get used 13:00 <+bridge> [ddnet] to generate a new save code 13:01 <+bridge> [ddnet] and the other question: `grep -Fr wordlist.txt src/` 13:03 <+ChillerDragon> ok thanks so its in ddnet code and for /save code 13:05 <+ChillerDragon> https://github.com/ddnet/ddnet/blob/6da2f117cf7db7531211997f7b1db5579c33235e/src/game/server/score/sql_score.cpp#L167 13:05 <+ChillerDragon> yikes hardcoded so it has to be in the path where the server is launched from .-. well i guess its fine 13:06 <+bridge> [ddnet] It just has to be in a storage path 13:06 <+ChillerDragon> ah true 13:06 <+ChillerDragon> ok nice i can move it to ~/.teeworlds then huh? 13:06 <+ChillerDragon> so it does not annoy me in the binary directory 13:06 <+bridge> [ddnet] I don't particularly like that you can't launch a server without this either 13:06 <+bridge> [ddnet] Yeah it can go into data too 13:06 <+bridge> [ddnet] what is so problematic about this file? @Learath2 13:07 <+ChillerDragon> how dangerous is it to move the file while the server is running? 13:07 <+bridge> [ddnet] not at all 13:07 <+ChillerDragon> its only used at server start right? 13:07 <+bridge> [ddnet] yes 13:07 <+ChillerDragon> ok awesome 13:07 <+ChillerDragon> and server wont start without? 13:07 <+bridge> [ddnet] @heinrich5991 idk it's a rather large text blob only used for an optional feature 13:07 <+ChillerDragon> oh optional 13:08 <+bridge> [ddnet] soon, we'll have save codes without mysql, too 13:08 <+bridge> [ddnet] Oh yep. Sqlite3 is exciting 13:14 <+bridge> [ddnet] @snail for french i can check and correct if needed 13:17 <+bridge> [ddnet] After i've readed .. I think there are plenty of correction i need to to x) 13:18 <+bridge> [ddnet] I will do that this week 13:29 <+bridge> [ddnet] We could compile the wordlist in, but not sure if that's better 13:29 <+bridge> [ddnet] seems cleaner the way it currently is 13:31 <+fstd> anybody else getting synflooded by 185.166.24.0/22? might be related to the last days ddos 13:39 <+bridge> [ddnet] nope, haven't noticed 13:40 <+fstd> well it's low throughput so it's hard to notice if you aren't looking for it 13:40 <+fstd> the curious thing is that i don't even serve a proper website (syns on port 443) 13:42 <+bridge> [ddnet] checked a tcpdump on ddnet.tw, nothing from that address 13:42 <+fstd> aight 14:14 <+fstd> emails to the abuse contact for that network bounce... 14:14 <+fstd> fantastic 14:14 <+Learath2> meh, probably nothing will come of it, cybercrime isn't a crime if you aren't hurting the bottomline of a company 14:15 <+Learath2> I guess maybe if you sound srs enough the hoster might be scared you'd actually bother with it 14:16 <+fstd> i wasn't expecting much, best case they enable ingress filtering 14:17 <+fstd> i figured bottomline or not, some sysadmin might not like the idea of someone spoofing his whole address space from within 14:19 <+ChillerDragon> fstd: how do I check if i get flooded by this ip 14:20 <+fstd> ChillerDragon: tcpdump -i eth0 -nl 'src net 185.166.24.0/22' 14:20 <+fstd> if your network interface is 'eth0' that is 14:20 <+ChillerDragon> is it rn? 14:20 <+ChillerDragon> yy ik 14:21 <+fstd> well i'm still receiving, although not much 14:21 <+fstd> 20 packets per sec or so 14:21 <+fstd> which is why i'm assuming i'm not the only receiver 14:24 <+ChillerDragon> did not get any traffic 14:24 <+ChillerDragon> so its unlikley tw related 14:25 <+fstd> but my webserver doesn't serve anything 14:25 <+fstd> literally just https://www.pr0.tips/ 14:26 <+ChillerDragon> oh so its web requests? 14:26 <+fstd> "foo bar www" 14:26 <+fstd> it's SYNs on the https port, yes 14:26 <+fstd> no actual requests though 14:26 <+ChillerDragon> i get so many crazy requests on my pstd server 14:26 <+Learath2> fstd: I don't get anything either on any server I have 14:27 <+fstd> hm that's so weird 14:29 <+ChillerDragon> fstd: do you also get these? https://paste.zillyhuhn.com/LV 14:29 <+ChillerDragon> looks like bugbounty hunters :D 14:30 <+fstd> nah that's just people probing for known vulnerabilities in certain web apps 14:30 <+fstd> and yeah i get those a lot (but paste.pr0.tips is running over at Learath2's) 14:30 <+ChillerDragon> oh 14:30 <+ChillerDragon> i thought u host that 14:31 <+fstd> pstd_server can't make sense of a lot of those requests due to the way it (does not) implement http 14:31 <+ChillerDragon> y 14:31 <+fstd> i could actually move it back to my server these days, yeah 14:31 <+fstd> oh wait, no 14:31 <+ChillerDragon> btw does econ still work in ddnet6? or am i stoopid? 14:32 <+ChillerDragon> if i connect via econ to ddnet6 i just crash the server 14:33 <+ChillerDragon> ah ok nvm using netcat it worked 14:36 <+Learath2> I buy a cake tin online that looks like it's one piece, turns out you can remove it's bottom... Why can't I just get a solid one piece cake tin? 14:37 <+Learath2> At this rate I'll have to get a normal one and have it welded.... 14:41 <+fstd> tf is a cake tin? 14:41 <+Learath2> the thing you bake a cake in 14:41 <+fstd> removable bottom sounds like a useful feature then 14:41 <+fstd> to get the cake out 14:42 <+fstd> without messing it up 14:42 <+Learath2> Unless you are baking custards like cheesecake which need to be baked in a waterbath. Then a removable bottom is the perfect place for the water to get in and give you a sad soggy bottom 14:43 <+fstd> i see, lol 14:43 <+fstd> fortunately cheese cake tastes like ass so nobody should ever have a reason to make one :P 14:44 <+Learath2> Just because you never had a good one 14:46 <+fstd> did you just call my momma a sub-par cheesecake maker? 14:47 <+Learath2> Okay, then you just don't like cheesecakes 14:53 <+bridge> [ddnet] xD 16:56 <+bridge> [ddnet] fstd: heh, I also got that for abuse contacts a few times. that's when you know they don't give a shit 16:58 <+bridge> [ddnet] Learath2: Post some cake photos next time 😄 17:06 <+bridge> [ddnet] https://rushter.com/blog/github-profile-markdown/ bah 17:09 <+bridge> [ddnet] https://github.com/Deen/mangos the deen on github did some wow server reimplementation stuff 🙂 17:13 <+bridge> [ddnet] well, he forked it and did a single change 10 years ago 17:13 <+bridge> [ddnet] what is a "wordlist.txt" 17:13 <+bridge> [ddnet] it's a list of words for random savecodes 17:14 <+bridge> [ddnet] `git log -- data/wordlist.txt` 17:14 <+bridge> [ddnet] ah i guess i just need to copy it to my serverdir for the server to start again :) 17:14 <+bridge> [ddnet] ah, yes 17:34 <+bridge> [ddnet] Cheesecake is good:kek: 17:42 <+bridge> [ddnet] @Learath2 can we take https://github.com/ddnet/ddnet/pull/2433 in? 17:45 <+bridge> [ddnet] @deen there are still a couple double messages that need to be masked 18:44 <+bridge> [ddnet] quite a few people on old clients, thats since yesterday 18:44 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/730826641135108156/screenshot-20200709184301.png 18:45 <+bridge> [ddnet] (older versions than 10 didn't access https://info.ddnet.tw/info 18:55 <+bridge> [ddnet] <ᶰ°Konͧsti> Cuz they faked version number to not get shit timer 19:02 <+bridge> [ddnet] lol @jao still uses ddnet 1.8.7 :kek: 19:02 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/730831328135872582/Screen_Shot_2020-07-09_at_12.01.11_PM.png 19:10 <+bridge> [ddnet] <ᶰ°Konͧsti> wowo jao murderer 19:12 <+bridge> [ddnet] :justatest: 19:26 <+bridge> [ddnet] @heinrich5991 sorry, I don't have idea that the spaces were okay on the french translation sorry about that. My bad 19:27 <+bridge> [ddnet] @heinrich5991 I speak only Spanish and a little english 19:28 <+bridge> [ddnet] @heinrich5991 Spanish is my native language and I speak a little english 19:44 <+bridge> [freenode] Can someone help me add sqlite to cmake? I can compile https://github.com/ddnet/ddnet/pull/2465 without any errors locally, but the Github CI isn't satisfied. 20:21 <+bridge> [ddnet] Zwelf: Did you forget to git add the cmake/FindSQLite3.cmake file? 20:21 <+bridge> [ddnet] do we need the sqlite3ext.h btw? 20:25 <+bridge> [freenode] No need for the sqlite3ext.h, I don't plan to use sqlite3 extensions. 20:26 <+bridge> [ddnet] Zwelf: Can we reenable /practice btw? I heard something was broken and thus it's disabled 20:29 <+bridge> [ddnet] @heinrich5991 thanks for all the reviews btw, you're very proactive and giving good feedback 20:29 <+bridge> [ddnet] and I know that reviewing is less fun than writing own new code, so it's much appreciated 20:30 <+bridge> [freenode] Can be enabled again if #2446 is deployed. Was related to the ClientID = TeamID change on solo servers. 20:30 <+bridge> [ddnet] thanks 20:30 <+bridge> [ddnet] I'm okay with doign reviews. I sometimes worry that I'm making PR authors work too much 20:30 <+bridge> [ddnet] ok, I'll reenable practice then 20:31 <+bridge> [ddnet] so far it's been reasonable I think with the work you asked 20:37 <+bridge> [freenode] yes, didn't write a FindSQLite3.cmake yet.. those look a bit scary, but can try to copy a simple one and modify it 21:20 <+bridge> [ddnet] while player is sitting in editor and getting mention, ddnet's icon on panel doesnt pulse 21:22 <+bridge> [ddnet] yeah, but you get a message in editor i think 21:23 <+bridge> [ddnet] yes, but im in *another* program atm 21:23 <+bridge> [ddnet] so i cant get that someone mentioned me 21:44 <+bridge> [freenode] @deen can you compile sqlite3 with SQLITE_OMIT_LOAD_EXTENSION (`CFLAGS=-DSQLITE_OMIT_LOAD_EXTENSION ./configure`) and rename sqlite to sqlite3 for consistency 21:49 <+bridge> [freenode] Currently there are linking errors to ld (using the .so would work as well) 23:12 <+bridge> [ddnet] Zwelf: done 23:36 <+bridge> [freenode] Thanks