Jump to content

chain

Administrators
  • Posts

    5,964
  • Joined

  • Last visited

  • Days Won

    17

Everything posted by chain

  1. Clasic spambot from another server LOL 01:05pm • app4soft (app4soft@k-3e0.vuq.83.45.IP) has joined • 01:06pm • app4soft: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX app4soft (app4soft@k-3e0.vuq.83.45.IP) has quit closed • 01:15pm • colesantiago (colesantia@k-3e0.vuq.83.45.IP) has joined • 01:16pm • colesantiago_ (colesantia@k-3e0.vuq.83.45.IP) has joined colesantiago: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX colesantiago (colesantia@k-3e0.vuq.83.45.IP) has quit closed colesantiago_: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX • 01:17pm • colesantiago_ (colesantia@k-3e0.vuq.83.45.IP) has quit closed • 01:28pm • pupdogg (pupdogg@k-el1.451.98.141.IP) has joined pupdogg_ (pupdogg@k-el1.451.98.141.IP) has joined • 01:29pm • pupdogg: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX pupdogg_: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX pupdogg (pupdogg@k-el1.451.98.141.IP) has quit closed pupdogg_ (pupdogg@k-el1.451.98.141.IP) has quit closed • 03:13pm • godtoldmetodoit (godtoldmet@k-tdj.3ms.213.185.IP) has joined • 03:14pm • godtoldmetodoit: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX godtoldmetodoit_ (godtoldmet@k-tdj.3ms.213.185.IP) has joined godtoldmetodoit (godtoldmet@k-tdj.3ms.213.185.IP) has quit closed • 03:15pm • godtoldmetodoit_: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX godtoldmetodoit_ (godtoldmet@k-tdj.3ms.213.185.IP) has quit closed • 03:28pm • JTbane (JTbane@k-n9p.3ms.213.185.IP) has joined JTbane: UR NOOB IRCD GOT PWNED BY LALBORNOZ FROM MIDIPIX / IRC.LIBERA.CHAT #MIDIPIX JTbane (JTbane@k-n9p.3ms.213.185.IP) has left
  2. Beta v7.64.6635 changes:1.Item 18, https://forums.mirc.com/ubbthreads.php/topics/268624
  3. Coders would like to wish you and your Families all a great and Happy Easter.
  4. Certo cosa posso fare per aiutarti
  5. The listen command now takes an optional IP; allowing you to listen on multiple IPs at the same time ISUPPORT / RAW 005 parsing is now possible. There is still work to be done in the future to automatically integrate some of these values into how Eggdrop interacts with the server, but for now they are available for you to use via the Tcl interface A significant change from RC1 based on feedback: What was previously the addserver/delserver Tcl command in RC1 (used to, surprisingly, add and delete a server from the server list in lieu of the historical "set server" method) is has been refactored to 'server add' and 'server remove'. This mirrors the 'channel add/remove' syntax and allows us to extend the syntax in the future if needed. We also want to make sure we thank our unofficial test force/guinea pigs Lord255, PeGaSuS, and WildCraze- they were instrumental in helping us test new features, identify bugs, and by providing feedback on general approaches. Thank you! (Want to help out? Ask in #eggdrop on Freenode!) As this is an RC, we're depending on you to help us find those last few bugs before we declare 1.9.0 as stable. Please use it and report any bugs you find to https://github.com/eggheads/eggdrop/issues or via the Freenode #eggdrop channel. We plan on leaving this comment period for this RC open for 2-3 weeks. If everything remains calm for the duration, we'll officially release 1.9.0 at that time. Or another time. We HIGHLY recommend you read NEWS for a full summary of all the changes made; it's not a terrible read, we promise and you may just find something useful tucked away in there. This is a RELEASE CANDIDATE, so we highly appreciate any testing and bug reporting we can get. You can expect a follow-up release candidate if necessary soon, or the final release of this version. Please report bugs by visiting us on #eggdrop on the Freenode IRC Network or by using https://github.com/eggheads/eggdrop/issues. Download Eggdrop v1.9.0rc2 here.
  6. Earlier this week, Microsoft released a whole bunch of updates for Windows 10 users. These updates also included KB5000802 cumulative update that caused PCs to crash with 'APC_INDEX_MISMATCH' BSOD error when trying to use printers. Yesterday, Microsoft acknowledged the issue and confirmed that the company was working on a fix for the problem. Now, it has updated the Windows Health status page to include a temporary workaround for the problem. According to Microsoft, the bug affects a subset of Type 3 printer drivers and does not affect Type 4 printers. As such, the company has shared a video for users to follow and fix the issue temporarily. If you are unsure about the type of printer drivers you have, you can follow the steps below to check it: REad More Here
  7. So I've been experimenting with various IRC clients 1. KVIRc 2. AdiRC 3. HexChat 4. ICEChat 5. HydrIRC There's really 2 that i still continue to use and modify to feed my needs, I choose KVIRc & AdiRC these both allow you to add your own backgrounds and icons. but best of all AdiRC has its own heck server icons for treebar which is kool. both have quite a bit of themes to it and developers are still working on supporting them both.
  8. I've been on this new server called IRCNOw which is a server for the user and they want all users to join the team. more info can be seen at the link at the bottom Read More Here
  9. :::::::::::::::::::::::::::: :::::: Coded By eNkIL :::::: :::::::::::::::::::::::::::: ::: Cambiale si sabes =) ::: :::::::::::::::::::::::::::: ;Connection menu menubar,channel,status { Connect:conn - } alias conn { if ($dialog(connect) == $null) { dialog -m connect connect } else { .echo -a -Dialogo de Conexion Ejecutandose.. } } alias -l conn.load.net { if ($exists(servers) == $false) { mkdir servers | write -c servers\delete.txt DELETE } did -r $dname 101 | %g = 1 while ($findfile(servers\,*.txt,%g)) { did -a $dname 101 $remove($nopath($findfile(servers\,*.txt,%g)),.txt) inc %g } unset %g } alias -l conn.load.serv { did -r $dname 201 | %f = servers\ $+ $did($dname,101,$did($dname,101).sel).text | %f = %f $+ .txt | %g = 2 while ($read(%f,%g)) { did -a $dname 201 $gettok($read(%f,%g),1,58) inc %g } } alias -l conn.rand.ident { return $rand(a,z) $+ $rand(a,z) $+ $rand(a,z) $+ $rand(0,9) $+ $rand(0,9) $+ $rand(0,9) $+ $rand(0,9) } alias -l conn.info.serv { %kk = $1 $+ * %l = $read(servers\ $+ $did($dname,101,$did($dname,101).sel).text $+ .txt,w,%kk) did -a $dname 602 $gettok(%l,2,58) did -a $dname 604 $gettok(%l,4,58) did -a $dname 505 $mid($gettok(%l,3,58),1,4) did -a $dname 505 $mid($gettok(%l,3,58),6,4) did -a $dname 505 $mid($gettok(%l,3,58),11,4) did -a $dname 505 $mid($gettok(%l,3,58),16,4) did -a $dname 505 $mid($gettok(%l,3,58),21,4) did -a $dname 505 $mid($gettok(%l,3,58),26,4) did -a $dname 505 $mid($gettok(%l,3,58),31,4) did -c $dname 505 1 | unset %l %kk } alias -l conn.add.net { set %addred $$?="Network name? Ex: Undernet" write servers\ $+ %addred $+ .txt < $+ %addred $+ > conn.load.net | conn.load.serv } alias -l conn.add.serv { if (!$did($dname,101,$did($dname,101).sel).text) { echo -at Please select the Network you would like to add the server. | halt } set %addserv1 $$?="Add server from: $did($dname,101,$did($dname,101).sel).text $+ . Ex: irc.undernet.org" set %addserv2 $$?="Server name? Ex: Undernet" set %addserv3 $$?="Ports?. Ex: 6667,6668" set %addserv4 $$?="Server country. Ex: USA, CANADA." write servers\ $+ $did($dname,101,$did($dname,101).sel).text $+ .txt %addserv2 $+ : $+ %addserv1 $+ : $+ %addserv3 $+ : $+ %addserv4 unset %addserv1 %addserv2 %addserv3 %addserv4 conn.load.serv } alias -l conn.rem.net { if (!$did($dname,101,$did($dname,101).sel).text) { echo -at Please select the Network you would like to remove. | halt } set %n $$?!="Are you sure you want to remove $did($dname,101,$did($dname,101).sel).text from the list?" if (%n) { .remove servers\ $+ $did($dname,101,$did($dname,101).sel).text $+ .txt | conn.load.net | conn.load.serv } unset %n } alias -l conn.rem.serv { if (!$did($dname,201,$did($dname,201).sel).text) { echo -at Please select the server you would like to remove from the list. | halt } set %n $$?!="Are you sure you want to remove $did($dname,201,$did($dname,201).sel).text from the list?" if (%n) { %l = $read(servers\ $+ $did($dname,101,$did($dname,101).sel).text $+ .txt,w,$did($dname,201,$did($dname,201).sel).text $+ *) write -dl $+ $readn servers\ $+ $did($dname,101,$did($dname,101).sel).text $+ .txt conn.load.serv } unset %n %l } alias -l conn.save.con { .server $did($dname,602).text $did($dname,505).text set %conn.auto.serv $did($dname,602).text $did($dname,505).text set %conn.modes.me $did($dname,307) var %nick = $did($dname,301) var %anick = $did($dname,302) if (%nick && %nick != $me) .nick %nick elseif (!%nick) .nick Nick1 if (%anick) .anick %anick else .anick Nick2 set %conn.ident.sel $did($dname,303).state var %ident_a = $did($dname,305) var %ident_b = $did($dname,306) if (%conn.ident.sel) { .identd on $iif(%ident_a,$ifmatch,None) } else { .identd on $iif(%ident_b,$ifmatch,None) } set %conn.ident $iif(%ident_a,$ifmatch,None) echo -a ok } dialog connect { title "Conection Center" size -1 -1 386 126 option dbu box "Network", 100, 2 2 101 122 list 101, 4 10 97 100, size vsbar button "+", 102, 26 110 12 12 button "-", 103, 66 110 12 12 box "Servers", 200, 105 2 101 122 list 201, 107 10 97 100, size vsbar button "+", 202, 129 110 12 12 button "-", 203, 168 110 12 12 box "", 300, 208 2 176 44 text "Nick:", 2, 210 11 25 8, center edit "", 301, 236 10 48 10, autohs text "aNick:", 4, 210 23 25 8, center edit "", 302, 236 22 48 10, autohs radio "Ident:", 303, 290 10 38 10 radio "Rand. Ident:", 304, 290 22 44 10 edit "", 305, 334 10 48 10, autohs edit "", 306, 334 22 48 10, read autohs text "Modes on connection:", 10, 275 35 58 8, edit "", 307, 334 34 48 10, autohs box "", 400, 208 46 176 22 button "Disconnect", 401, 210 53 37 12 button "Connect", 402, 278 53 37 12 button "Close", 403, 345 53 37 12, ok cancel box "", 500, 208 68 61 56 check "Connect on Start", 501, 210 73 50 10 check "Open on Start", 502, 210 90 50 10 text "Ports:", 504, 209 111 16 8 combo 505, 228 109 40 50, size drop box "", 600, 271 68 113 56 text "Server:", 601, 273 81 21 8 edit "", 602, 295 80 87 10, read center text "Country:", 603, 273 104 25 8 edit "", 604, 300 103 82 10, read center } on *:dialog:connect:*:*: { if ($devent = init) { conn.load.net if ($server != $null) { did -a $dname 602 $server | did -a $dname 600 Connected } if (%conn.auto.start) { did -c $dname 501 } if (%conn.show.start) { did -c $dname 502 } if (%conn.ident.sel) { did -c $dname 303 } | else { did -c $dname 304 } did -a $dname 301 $me did -a $dname 302 $anick did -a $dname 305 %conn.ident did -a $dname 306 $conn.rand.ident did -a $dname 307 %conn.modes.me } if ($devent = sclick) { if ($did = 101) { did -r $dname 201 | did -z $dname 101 | did -z $dname 201 | conn.load.serv $did($dname,101,$did($dname,101).sel).text } if ($did = 102) { conn.add.net } if ($did = 103) { conn.rem.net } if ($did = 201) { did -z $dname 101 | did -z $dname 201 | did -r $dname 505 | did -r $dname 602 | did -r $dname 604 | conn.info.serv $did($dname,201,$did($dname,201).sel).text } if ($did = 202) { conn.add.serv } if ($did = 203) { conn.rem.serv } if ($did = 304) { did -r $dname 306 | did -a $dname 306 $conn.rand.ident } if ($did = 401) { disconnect } if ($did = 402) { conn.save.con } if ($did = 501) { set %conn.auto.start $did($dname,501).state } if ($did = 502) { set %conn.show.start $did($dname,502).state } } if ($devent = dclick) { if ($did = 201) { conn.save.con } } } on *:start: { if (%conn.show.start) { conn } if (%conn.auto.start) { .server %conn.auto.serv } } on *:connect:{ if $dialog(connect) { did -ra connect 602 $server | did -a connect 600 Connected } .mode $me %conn.modes.me }
  10. Vorwort Nachdem ich für AdiIRC ein Script gesucht habe, welches Informationen zu verlinkten YouTube Videos anzeigt, wurde hier ich fündig. Allerdings ist das Script von nick1 (illhawkthat) in die Jahre gekommen und funktioniert nicht mehr richtig. Deswegen habe ich ein Rewrite vorgenommen und meine eigene Version erstellt und auf das wesentliche (das Anzeigen von Informationen) reduziert. Bei dieser Neuauflage handelt es sich allerdings nicht um eine perfekte Neuauflage des Scripts von Ich habe mir die Sprache mSL erst ein paar Tage angeschaut und habe entsprechend noch nicht ihre Eigenheiten ganz im Griff. Dennoch konnte ich bei meinen Tests keine großen Fehler feststellen. Der Code ist mit reichlich Kommentaren versehen, zumindest am Anfang von den meisten Funktionen. Beschreibung Wie der Name schon fürchten lässt, handelt es sich um ein Script, das Informationen zu verlinkten YouTube Videos auf die eine oder andere Art ausgibt. Die Ausgabe kann entweder im Channel/Query erfolgen oder nur für die eigene Sichtbarkeit über die Echo-Funktion. Voraussetzung Das Script ist rein in mSL geschrieben und greift auf keine COM Komponenten zu. Dadurch entfällt die Voraussetzung, dass für die 64 bit Version von AdiIRC ein zuästzliches Programm (Script Control for 64 bit) installiert werden muss. Allerdings muss, damit das Script funktioniert, ein Google API-Key beantragt werden, um auf die YouTube Data API v3 zugreifen zu können. Sollte kein API-Key vorhanden sein, funktioniert das Script nicht. Mit folgenden Clients wurde das Script getestet: AdiIRC 3.8 mIRC 7.62 In neueren Versionen sollte das Script auch funktionieren. Features Einstellbar, welche Orte geparst werden sollen (Channel oder Queries) Ausgabe kann auch über Echo nur für sich selbst erfolgen Auswahl welche Links geparst werden sollen youtube.com youtu.be yu2.be Ausgabenachricht kann dank Platzhalter auf Wunsch angepasst werden Einzelne Personen, Channel oder Server können ignoriert werden Bekannte Fehler Hauptdialog Bei einem Klick auf ein Objekt im Dialog, werden die oberen Boxen leicht von den Tabs verdeckt (mIRC) Installation Allgemein Das Script am besten in eine Text-Datei kopieren und als *.mrc Datei an einem für den Client zugänglichen Ort speichern. Wenn das Script geladen wurde, kann mit dem Befehl /youtube_announcer das Script eingestellt werden. Nachdem der Dialog geschlossen wurde, wird eine Datei (yta_settings.ini) im Ordner $mircdir angelegt. mIRC Über den Shortcut Alt+R den Scripteditor öffnen und auf den Tab "Remote" wechseln. Anschließend mit Strg+L (oder über File->Load) die erstellte Datei laden. AdiIRC Über den Shortcut Alt+R den Scripteditor öffnen und anschließend mit Strg+L (oder über File->Load) die erstellte Datei laden. Deinstallation Allgemein Mit dem Befehl /youtube_announcer deinstall kann das Script deaktiviert werden, ohne das es entladen werden Ohne entladen wird das Event noch ausgeführt, aber bricht schon in den ersten Zeilen ab (durch fehlende Variablen). Hinweis: Das Script ist nur so lange deaktiviert, bis /youtube_announcer aufgerufen wird. Durch den Aufruf werden nämlich alle Variablen neu geladen. Vollständige Deinstallation Um das Script vollständig zu deinstallieren, muss /youtube_announcer deinstall ausgeführt werden und anschließend die Datei entladen oder gelöscht werden. In der Regel kann die Datei in den Clients im Editor unter dem Menüpunkt File -> Unload entladen werden und ein Aufruf von /youtube_announcer sollte nicht mehr möglich sein. Zusätzlich kann die Datei am Speicherort entfernt werden. Damit die Einstellugen persistent, auch über ein unload hinaus, erhalten bleiben, wird die Datei yta_settings.ini angelegt. Die Datei kann in $mircdir (//echo -ag mIRC/AdiIRC Ordner: $mircdir) gefunden werden. Der Code ; #-> Allgemeine Informationen <-# ; Name: YouTube Announcer ; Author: Kylar ; Date: 25.09.2020 ; Version: 1.0.0 - Erster Release ; Beschreibung: YouTube Announcer tut genau das, was der Name vermuten/befürchten lässt. ; Das Script sucht aktiv in allen Channels (die nicht ignoriert werden sollen) nach YouTube Links und liefert, über die Google API, Informationen zum Video. ; Dabei kann die Ausgabe für sich selbst (über Echo) oder als MSG im Channel erfolgen. ; ; Voraussetzungen: AdiIRC in der Version 3.8 oder höher oder mIRC in der Version 7.62 oder höher. ; Einen Google API-Key für die YouTube Data API v3 (siehe https://developers.google.com/youtube/v3/getting-started) ; ; #-> Installation <-# ; Script entsprechend in AdiIRC/mIRC laden und den Befehl /youtube_announcer aufrufen, um das Script einzustellen. ; Nachdem die Einstellungen vorgenommen wurden, reagiert das Script entsprechend auf Nachrichten. ; ; #-> Deinstallation <-# ; Einfach den Befehl /youtube_announcer deinstall eingeben und das Script entfernt alle globalen Variablen. ; ACHTUNG: Die aktuellen Einstellungen werden in der yta_settings.ini gespeichert und beim erneuten aufrufen von /youtube_announcer geladen. ; Für eine vollständige Deinstallation den Befehl /youtube_announcer deinstall aufrufen, das Script und die yta_settings.ini löschen. ;; ############## ;; # Dialog/GUI # ;; ############## alias youtube_announcer { if ( $0 == 0 ) { dialog -m yta_d_main yta_d_main } else { if ( $lower($1) == deinstall || $lower($1) == uninstall || $lower($1) == deinstallation ) { yta_uninstall } } } ; TODO Unter Nachricht einstellen, dass die Vorschau auch per Echo erfolgen kann (für Farbe usw.) ; Haupt Dialog zum einstellen des Scripts Dialog yta_d_main { ;; Main title "YouTube Announcer" ; -1 -1 setzt den Dialog in die Mitte vom Hauptfenster size -1 -1 200 150 option dbu menu "About", 100 ; menu "Hilfe", 101 ;; Tab Allgemeine Einstellen tab "Allgemeine Einstellungen", 1, 0 0 200 150 box "Parsing", 10, 5 15 190 70, tab 1 ; Abstand in der Höhe bei Check muss mindestens 8 sein check "Channel Nachrichten Parsen", 11, 10 24 76 8, tab 1 check "Privat Nachrichten Parsen", 12, 10 32 70 8, tab 1 check "YT-Infos nur über Echo ausgeben", 22, 95 24 88 8, tab 1 text "Anbieter die geparst werden sollen", 13, 10 43 180 8, tab 1 list 14, 10 52 180 28, tab 1 size extsel check multse vsbar box "API", 15, 5 90 190 50, tab 1 text "Damit das Script Informationen über YouTube Videos abrufen kann,", 16, 10 99 180 8, nowrap tab 1 text "wird ein API-Key von "17, 10 107 50 8, nowrap tab 1 link "Google", 18, 62 107 18 8, tab 1 text "benötigt. Der Key wird auschließlich zum ", 19, 80 107 100 8, tab 1 text "Abrufen der Videoinformationen verwendet." 20, 10 115 180 12, tab 1 edit "", 21, 20 125 150 10, tab 1 ;; Anpassen der Nachricht die ausgegeben wird tab "Nachrichten-Formatierung", 3, 0 0 200 150 box "Nachricht", 30, 5 15 190 57, tab 3 edit "", 31, 10 24 180 10, tab 3 autohs text "Vorschau", 32, 10 36 100 8, tab 3 edit "", 33, 10 44 180 10, tab 3 rich read autohs check "Vorschau als Echo ausgeben?", 38, 10 58 80 8, tab 3 box "Platzhalter", 34, 5 75 190 40 , tab 3 text "Die folgenden aufgelisteten Zeichenfolgen werden automatisch ersetzt.", 35, 10 84 180 8, tab 3 text "<duration>, <title>, <channeltitle>, <publishedat>, <favoritecount>", 36, 10 94 180 8, tab 3 text "<viewcount>, <likecount>, <dislikecount>, <commentcount>", 37, 10 102 180 8, tab 3 ;; Channels/Nicks die ignoriert werden sollen tab "Ignorieren", 4, 0 0 200 150 text "Server, Channel und Nicknames eintragen, die ignoriert werden sollen.", 40, 5 15 190 12, tab 4 box "Eingabe", 41, 5 30 190 37, tab 4 text "Format: [network:][#]Ziel.", 42, 10 40 75 8, tab 4 edit "", 43, 10 50 150 10, tab 4 button "Hinzfügen", 44, 163 50 30 10, tab 4 box "Liste der zu ignorierenden Objekte", 45, 5 72 190 70, tab 4 list 46, 10 82 153 55, tab 4 size extsel vsbar button "Entfernen", 47, 165 82 27 55, tab 4 multi } ; About Dialog (zeigt momentan nur Basic-Informationen an) dialog yta_d_about { title "About - YouTube Announcer" size -1 -1 100 70 option dbu text "Script Name: YouTube Announcer", 1, 5 5 100 8 text "Author: Kylar", 2 , 5 13 100 8 text "Date: September 2020", 3, 5 21 100 8 text "Kurzbeschreibung: Liefert Informationen zu erkannten YouTube Links", 4, 5 29 190 20 text "Voraussetzung: YouTube/Goole API-Key", 5, 5 50 100 14 } ;;# ;; Dialog Events ;;# ; Settings laden und die Tabs mit Inhalt befüllen on *:DIALOG:yta_d_main:init:0: { did -a yta_d_main 14 youtube.com did -a yta_d_main 14 yu2.be did -a yta_d_main 14 youtu.be ; Wenn keine Settings vorhanden sind, entsprechend die settings ini laden oder erstellen if ( !$var(%yta/settings/*)) { yta_load_config } var %i = 1 while ( %i <= $var(%yta/settings/*) ) { var %j = 1, %fp = $var(%yta/settings/*, %i) ,%sec = $token(%fp, $calc($numtok(%fp, 47) - 1), 47), %item = $token(%fp, $numtok(%fp, 47), 47) var %val = $var(%yta/settings/*, %i).value ; Liste der zu ignorierenden Ziele befüllen if (%item == list ) { $iif(%val != $chr(7), yta_fill_ignorelist, noop) } ; Die Nachricht, die ausgegeben werden soll, befüllen elseif ( %item == msg ) { $iif(%val != $chr(7), yta_fill_msg, noop ) } ; API-Key Feld befüllen elseif ( %item == apikey ) { $iif(%val != $chr(7), yta_fill_apikey, noop ) } ; URLS in der Liste markieren elseif ( %item == urls ) { if ( %val != $chr(7) ) { var %j = 1 while ( %j <= $numtok(%val, 44) ) { var %k = 1, %val1 = $token(%val, %j, 44) while ( %k <= $did(14).lines ) { if ($did(14, %k).text == %val1) { did -s yta_d_main 14 %k } inc %k } inc %j } } } ; Checkbox für die Ausgabe der über Echo elseif ( %sec == General && %item == echo ) { if ( %val == 1 ) { did -c $dname 22 } } ; Checkbox, ob Channel-Nachrichten geparst werden sollen elseif ( %item == cmsg ) { if ( %val == 1 ) { did -c $dname 11 } } ; Checkbox, ob Private-Nachrichten geparst werden sollen elseif ( %item == pmsg ) { if ( %val == 1 ) { did -c $dname 12 } } ; Einstellung für die Ausgabe der Vorschau elseif ( %sec == Message && %item == echo ) { if ( %val == 1 ) { did -c $dname 38 } } inc %i } } ; Einstellungen beim Verlassen des Dialogs in die ini schreiben on *:DIALOG:yta_d_main:close:0: { yta_save_config } ; API-Key in Variable speichern on *:DIALOG:yta_d_main:edit:21: { set %yta/settings/General/apikey $did(21).text } ; Verarbeitung der Click-Events ; Im Tab IgnoreList: Multiselektion kann nicht als ganzes entfernt werden, nur einzelne Ziele können entfernt werden. on *:DIALOG:yta_d_main:sclick:*: { if ( $did == 11 ) { ; channel nachricht set %yta/settings/General/cmsg $did(11).state } elseif ( $did == 12 ) { ; private nachricht set %yta/settings/General/pmsg $did(12).state } elseif ( $did == 22 ) { set %yta/settings/General/echo $did(22).state } elseif ( $did == 14 ) { ;listbox mit urls if ( $did(14, $did(14).sel ).cstate == 1 ) { set %yta/settings/General/urls $addtok($did(14, $did(14).sel).text, %yta/settings/General/urls, 44) } else { set %yta/settings/General/urls $remtok(%yta/settings/General/urls, $did(14, $did(14).sel).text, 0, 44) } } elseif ($did == 44) { ; Tab Ignorelist ; Hinzufügen if ($len($did(43).text) > 0) { if ( (, !isin $did(43).text) && $regex($did(43).text, /^(?:\w+:)?#?[a-zA-Z0-9:#\|]+/) ) { set %yta/settings/IgnoreList/list $addtok($did(43).text, %yta/settings/IgnoreList/list, 44) did -r yta_d_main 43 yta_fill_ignorelist } } } elseif ( $did == 47 ) { ; Tab Ignorelist ; Entfernen if ( $len($did(46).seltext) > 0 ) { set %yta/settings/IgnoreList/list $remtok(%yta/settings/IgnoreList/list, $did(46).seltext, 0,44) did -r yta_d_main 46 didtok yta_d_main 46 44 %yta/settings/IgnoreList/list } } elseif ( $did == 38 ) { set %yta/settings/Message/echo $did(38).state } elseif ( $did == 18 ) { .url https://developers.google.com/youtube/v3/getting-started } } ; Das Textfeld "Vorschau" mit den Inhalt aus "Nachricht" befüllen und ; Platzhalter durch Dummy-Daten ersetzen on *:DIALOG:yta_d_main:edit:31: { if ($len($did(31).text) > 0) { var %t1 = publishedAt $+ $chr(7) $+ title $+ $chr(7) $+ channelTitle $+ $chr(7) $+ duration $+ $chr(7) $+favoritecount $+ $chr(7) $+ viewcount $+ $chr(7) $+ likecount $+ $chr(7) $+ dislikecount $+ $chr(7) $+ commentcount var %t2 = 2012-10-01T15:27:35Z $+ $chr(7) $+ A very special Title $+ $chr(7) $+ TheChan Nel $+ $chr(7) $+ PT7H3M33S $+ $chr(7) $+ 60 $+ $chr(7) $+ 1250 $+ $chr(7) $+ 1000 $+ $chr(7) $+ 250 $+ $chr(7) $+ 450 ; Vorschau soll auch per Echo erfolgen if ( %yta/settings/Message/echo == 1 ) { echo -ga $yta_replace_placeholder($did(31).text, %t1, %t2) } did -ri yta_d_main 33 1 $yta_replace_placeholder($did(31).text, %t1, %t2) } else { did -r yta_d_main 33 } set %yta/settings/Message/msg $did(31).text } ; About Dialog öffnen on *:DIALOG:yta_d_main:menu:100 { ; Diese Operation blockt die UI und das Fenster MUSS geschlossen werden noop $dialog(yta_d_about, yta_d_about) } ;;# ;; Helfer-Funktionen ;;# ; Liste der zu ignorierenden Ziele füllen alias yta_fill_ignorelist { did -r yta_d_main 46 var %i = 1 while ( %i <= $numtok(%yta/settings/IgnoreList/list, 44) ) { var %val = $token(%yta/settings/IgnoreList/list, %i, 44) did -a yta_d_main 46 %val inc %i } } ; Wird beim Dialog-Start aufgerufen, um "Vorschau" und "Nachricht" zu befüllen alias yta_fill_msg { if ( $len(%yta/settings/Message/msg) > 0 ) { did -r yta_d_main 31 did -a yta_d_main 31 %yta/settings/Message/msg var %t1 = publishedAt $+ $chr(7) $+ title $+ $chr(7) $+ channelTitle $+ $chr(7) $+ duration $+ $chr(7) $+favoritecount $+ $chr(7) $+ viewcount $+ $chr(7) $+ likecount $+ $chr(7) $+ dislikecount $+ $chr(7) $+ commentcount var %t2 = 2012-10-01T15:27:35Z $+ $chr(7) $+ A very special Title $+ $chr(7) $+ TheChan Nel $+ $chr(7) $+ PT7H3M33S $+ $chr(7) $+ 60 $+ $chr(7) $+ 1250 $+ $chr(7) $+ 1000 $+ $chr(7) $+ 250 $+ $chr(7) $+ 450 did -ri yta_d_main 33 1 $yta_replace_placeholder($did(31).text, %t1, %t2) } } ; Wird beim Dialog-Start aufgerufen, um das Feld "APIKEY" zu befüllen alias yta_fill_apikey { if ( $len(%yta/settings/General/apikey) > 0 ) { did -r yta_d_main 21 did -a yta_d_main 21 %yta/settings/General/apikey } } ; Ersetzt im Text ($1) alle Platzhalter ($2) mit den enstprechenden Werten ($3) ; Die Funktion erwartet 3 Token ; $1 = Text in dem ersetzt werden soll ; $2 = Eine Tokenliste (Trennzeichen $chr(7)) mit Wörtern die Ersetzt werden sollen (ohne < und >) ; $3 = Eine Tokenliste (Trennzeichen $chr(7)) mit der gleichen Länge wie $2 und den entrechpenden Werten die eingesetzt werden sollen. ; Rückgabe: Der übergebene Text ($1) mit den ersetzten Platzhaltern oder bei Fehler den gleichen Text ; Beispiel: //echo -ag $yta_replace_placeholder(Der <title> ist von <channeltitle>., title $+ $chr(7) $+ channeltitle, TESTTITLE $+ $chr(7) $+ Channel Title ist Super!) alias yta_replace_placeholder { var %msg = $1 if ($isid && $0 == 3) { if ( $numtok($2, 7) == $numtok($2, 7) ) { var %i = 1 while ( %i <= $numtok($2, 7) ) { var %key = $lower($token($2, %i, 7)), %val = $token($3, %i, 7) if ( (%key != title) && (%key != channelTitle) ) { var %val $yt_placeholder_format(%val) } noop $regsub(%msg, /< $+ %key $+ >/gi, %val, %msg) inc %i } } return %msg } } ; Helferfunktion die Zahlen (1000 wird zu 1 Tsd), Published-Datum (2012-10-01T15:27:35Z zu 01.10.2012) und Lauflänge (PT3D1H5M30S zu 03:01:05:30) umwandelt ; Zahlen werden nur bis Mrd umgewandelt, alles was größer ist, wird normal ausgegeben ; Zeit wird, bei Fehler und so weiter, als 00:00:00 ausgegeben ; TODO Funktion mathematisch aufarbeiten und nicht so einen Quark nutzen :P aber so lange es funktioniert? alias yt_placeholder_format { if ($isid && $0 == 1) { if ( $1 isnum ) { var %i = 3, %j = 1, %suff = Tsd.Mio.Mrd while ( %i <= 9 ) { var %v = $round($calc($1 / (10^%i)), 2) if ( $len($int(%v)) <= 3 && $int(%v) > 0 ) { return %v $token(%suff, %j, 46) } inc %i 3 inc %j } } elseif ( $lower($left($1, 2)) == $lower(PT) ) { var %t = $lower($mid($1, 3, $len($1))) var %d = 00, %h = 00, %m = 00, %s = 00 while ( $len(%t) >= 1 ) { if ( $left(%t, 1) isnum ) { var %tmp = %tmp $+ $left(%t, 1) } else { var % $+ $left(%t, 1) $iif($len(%tmp) == 1, 0) $+ %tmp unset %tmp } var %t = $mid(%t, 2, $len(%t)) } return $iif(%d != 00, %d $+ :) $+ $iif(%h != 00, %h $+ :, 00:) $+ $iif(%m != 00, %m $+ :, 00:) $+ %s } elseif ( $numtok($1, 84) == 2 ) { var %date = $token($1, 1, 84) return $token(%date, 3, 45) $+ . $+ $token(%date, 2, 45) $+ . $+ $token(%date, 1, 45) } } return $1 } ; Überprüft, ob eines der angegebenen Argumente in der Ignorelist ist ; Folgende Angaben sind möglich: ; Wenn nur $1: $1 = Channel/Nickname/Server der geprüft wird ; Wenn $1 und $2: $1 = Server, $2 = Nickname/Channel der in Kombination geprüft werden soll ; Wenn $1, $2, und $3: $1 = Server, $2 = Channel und $3 = Nickname ; Rückgabe: $true wenn eins der übergebenen Argumente in der Liste gefunden wird, ansonsten $false alias yta_is_in_ignorelist { if ( $isid ) { if ( $0 >= 1 ) { var %i = 1, %1 = $lower($1), %2 = $lower($2), %3 = $lower($3) while ( %i <= $numtok(%yta/settings/IgnoreList/list, 44) ) { var %target = $lower($token(%yta/settings/IgnoreList/list, %i, 44)) if ( %1 $+ : == %target || %1 == %target ) { return $true } elseif ( %2 != $null && ( %2 == %target || %1 $+ : $+ %2 == %target ) ) { return $true } elseif ( %3 != $null && (%3 == %target || %1 $+ : $+ %3 == %target) ) { return $true } inc %i } } return $false } } ; Testet, ob in $1 der Text nach möglichen URLS geparst werden soll. ; $1 muss entweder chan oder priv sein ; Rückgabe: $true wenn parsing aktiv sein soll, ansonsten $false alias yta_is_parsing_active { if ( $isid ) { if ( ($1 == chan && %yta/settings/General/cmsg == 1) || ($1 == priv && %yta/settings/General/pmsg == 1) ) { return $true } return $false } } ; Testet, ob $1 eine URL ist die aktiv abgefragt werden soll ; Rückgabe: $true wenn sie aktiv ist, ansonsten $false alias yta_is_active_url { if ( $isid ) { var %i 1 while ( %i <= $numtok(%yta/settings/General/urls, 44) ) { if ( $1 == $token(%yta/settings/General/urls, %i, 44) ) { return $true } inc %i } return $false } } ;; # ;; Konfiguration laden/speichern ;; Nur über das Dialog Event Init aufrufen! ;; # alias yta_load_config { var %settings/General = cmsg pmsg echo urls apikey var %settings/Message = msg echo var %settings/IgnoreList = list var %i = 1 while (%i <= $var(%settings/*)) { var %tmpk = $token($var(%settings/*, %i), 2, 47) var %tmpv = %settings/ [ $+ [ %tmpk ] ] var %j = 1 while (%j <= $numtok(%tmpv, 32)) { var %item = $token(%tmpv, %j, 32) var %val = $readini($mircdir $+ yta_settings.ini, n, %tmpk, %item) set %yta/settings/ $+ %tmpk $+ / $+ %item $iif(%val == $chr(7), $null, %val) inc %j } inc %i } } alias yta_save_config { var %i = 1 while ( %i <= $var(%yta/settings/*) ) { var %fp = $var(%yta/settings/*, %i) var %val = $var(%yta/settings/*, %i).value var %key = $token(%fp, $calc($numtok(%fp, 47) - 1), 47) var %item = $token(%fp, $numtok(%fp, 47), 47) ; Damit kein Fehler geworfen wird, representiert 7 (BEL) keinen Inhalt writeini $mircdir $+ yta_settings.ini %key %item $iif(%val == $null, $chr(7), %val) inc %i } } ;; ###################################### ;; # Nachrichtenverarbeitung und Socket # ;; ###################################### ;; <# Haupt-Event ; Reagiert auf Texte (Channel/Privat) die ; https?://(www)?youtu(.be|be.com) oder https?://(www)?yu2.be beinhalten ; Abbruch des Events passiert in mehreren Stufen, weil nicht Daten ; sofort vorhanden sind (z.B. der tatsächliche URL wird erst im Regex ermittelt). ;; #> on $*:TEXT:$(/https? $+ $chr(58) $+ \/{2}(w{3}\.)?(youtu\.?be(\.com)?|yu2.be)/Si):*: { ; Überprüfen, ob überhaupt parsing erlaubt ist if ( $chan != $null && !$yta_is_parsing_active(chan) ) { return $false } elseif ( $chan == $null && !$yta_is_parsing_active(priv) ) { return $false } ; Wenn das bearbeiten erlaubt ist, überprüfen dass auch kein Ziel (Server, Chan, Nick) ingoriert werden soll if ( !$yta_is_in_ignorelist($network, $iif($chan != $null, $chan, $nick), $iif($chan != $null, $nick)) ) { ; Folgendes regex soll die Video-ID suchen und das 1. Ergebnis speichern ; Den Regex kann man bestimmt schöner machen, aber er hat in meinen Tests funktioniert var %re = https?:\/{2}(?:w{3}\.)?((?:youtu\.?be(?:\.com)?|yu2.be))\/(?=watch\?v\=([a-zA-Z0-9_-]+)|([a-zA-Z0-9_-]+)) if ( $regex(yta_re_match, $1-, / $+ %re $+ /Si) > 0 ) { var %vid = $regml(yta_re_match, 2), %host = $regml(yta_re_match, 1) ; Host/URL kann erst ab hier geprüft werden ; Ist die URL nicht Aktiv (Checkbox im UI) dann wird das Event hier beendet if ( !$yta_is_active_url(%host) ) { return $false } ; Ticks sind ms seit systemstart var %tick $ticks ; Um Spam zu verhindern, nur alle 30 Sekunden ein Video für Chan/Nick abfragen if ( $calc(%tick - [ % $+ yta/spamprot/ $+ [ $network ] $+ [ $iif($chan != $null, $chan, $nick) ] $+ /tick ] ) >= 30000 ) { set %yta/spamprot/ $+ $network $+ $iif($chan != $null, $chan, $nick) $+ /tick %tick ; Spamprot und request Variablen nach 30 Sekunden entfernen .timer $+ yta/timers/ $+ $network $+ $iif($chan != $null, $chan, $nick) 1 30 yta_request_cleanup $network $+ $iif($chan != $null, $chan, $nick) ; Socket öffnen und Informationen als mark speichern sockopen -e yta/sockets/ $+ %tick googleapis.com 443 sockmark yta/sockets/ $+ %tick $network $+ , $+ $iif($chan != $null, $chan, $nick) $+ , $+ %vid } } } } ;; <# Socket Logik ; Im folgendem Abschnitt befindet sich die Logik für den Umgang mit den geöffneten Sockets. ; Dabei gibt es zwei Hauptevents die bearbeitet werden. ; Beim öffnen wird eine HTTP Anfrage an den googleapis Server geschickt und die Markierung vom Socket in die Request-Variable geschrieben. ; Im Lesevorgang werden die erhaltenen Daten verarbeitet, in die Request-Variable geschrieben und die Ticknummer an die Funktion yta_send_message übergeben ;; #> on *:SOCKOPEN:yta/sockets/*: { ; Daten für das GET Request zusammen tragen var %apikey %yta/settings/General/apikey var %vid $token($sock($sockname, 1).mark, 3, 44) var %tick $token($sockname, $numtok($sockname, 47), 47) ; Wenn eines von beiden nicht abgerufen werden kann, socket schließen if ( %apikey == $null || %vid == $null) { unset %yta/ytrequests/ $+ %tick $+ /* sockclose $sockname return $false } ; GET Request zusammensetzen var %get /youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics $+ &id= $+ %vid $+ &key= $+ %apikey ; HTTP Anfrage senden sockwrite -n $sockname GET %get HTTP/1.1 sockwrite -n $sockname Host: www.googleapis.com sockwrite -n $sockname User-Agent: mSL YouTube Announcer sockwrite -n $sockname Accept: application/json sockwrite -n $sockname set %yta/ytrequests/ $+ %tick $+ / $+ network $token($sock($sockname, 1).mark, 1, 44) set %yta/ytrequests/ $+ %tick $+ / $+ dest $token($sock($sockname, 1).mark, 2, 44) set %yta/ytrequests/ $+ %tick $+ / $+ vid $token($sock($sockname, 1).mark, 3, 44) } ; TODO Eventlogik umschreiben, so das Hashtables verwendet werde ; Durch filtern von Elementen die ersetzt werden, ensteht ein Chaos aus IF/ELSIF Verzweigungen. ; Deswegen wäre ein Rewrite mit Hashtables vielleicht sinnvoll, um alle Elemente vom JSON zu speichern. on *:SOCKREAD:yta/sockets/*: { var %tick $token($sockname, $numtok($sockname, 47), 47) var %line sockread %line ; HTTP Status-Code abfragen und entsprechend fortfahren oder abbrechen if ( HTTP/1.1 isin %line ) { if ( $token(%line, 2, 32) != 200 ) { unset %yta/ytrequests/ $+ %tick $+ /* sockclose $sockname return $false } } elseif ( "publishedAt" isin %line ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ publishedat %val } elseif ( "title" isin %line && %yta/ytrequests/ [ $+ [ %tick ] $+ /title ] == $null ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ title %val } elseif ( "channeltitle" isin %line ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ channeltitle %val } elseif ( "duration" isin %line ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ duration %val } elseif ( "viewcount" isin %line ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ viewcount %val } elseif ( "likecount" isin %line ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ likecount %val } elseif ( "dislikecount" isin %line ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ dislikecount %val } elseif ( "favoritecount" isin %line ) { var %val $token($yta_json_keyval_token(%line), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ favoritecount %val } elseif ( "commentCount" isin %line ) { ; Quick and Dirty: Einfach ein Komma am Ende hinzufügen, weil sonst das Regex nicht greift var %val $token($yta_json_keyval_token(%line $+ $chr(44)), 2, 7) set %yta/ytrequests/ $+ %tick $+ / $+ commentcount %val ; Comment Count ist das letzte Element das interessant ist für dieses Script sockclose $sockname yta_send_msg %tick } } ; Wird ausgeführt, wenn die Gegenseite ein Socket beendet ; Entsprechend, damit sich nicht zu viele globale Variablen ansammeln, ein unset versuchen on *:SOCKCLOSE:yta/sockets/*: { var %tick $token($sockname, $numtok($sockname, 47), 47) unset %yta/ytrequests/ $+ %tick $+ /* } ;; <# ;; Helfer Funktionen und Events ;; #> ; Parst die Zeichenfolge und teilt diese in Key:Val auf (Token, Trennzeichen 7) (Quick and Dirty Version) ; Argument $1: Zeichenfolge im Format \s+"<Key>":\s"<Val>", ; Rückgabe: Key und Val als Token oder nichts bei Fehler ; TODO Regex umschreiben, so das es auch greift, wenn kein Komma am Ende ist (letzte Element in einer Liste in JSON) alias yta_json_keyval_token { if ( $isid ) { if ( $regex(yta_test, $1, /^\s+"(.*?)": "(.*?)" $+ $chr(44)$/) == 1 ) { var %key $regml(yta_test,1) var %val $regml(yta_test,2) return %key $+ $chr(7) $+ %val } return $null } } ; Wraper, um einfacher auf die Request-Variable zugreifen zu können ; Argument $1: Tick Nummer vom Request ; Rückgabe: Inhalt der Request-Variable oder $null ; Beispiel: echo -ga Title: $yta_request_result(<tick>).title alias yta_request_result { if ( $isid ) { if ( $var(%yta/ytrequests/ [ $+ [ $1 ] $+ ] /*) > 0 ) { return %yta/ytrequests/ [ $+ [ $1 ] $+ / $+ [ $prop ] ] } return $null } } ; Gibt die eingestellte Nachricht am Abfrageort aus oder per Echo im aktiven Fenster ; Argument $1: yta request Tick Nummer ; Die Funktion erwartet als 1. Argument den Namen der globalen Variable ; für den Request der ausgegeben werden soll alias yta_send_msg { var %placeholders publishedAt $+ $chr(7) $+ title $+ $chr(7) $+ channelTitle $+ $chr(7) $+ duration $+ $chr(7) $+ favoritecount var %placeholders %placeholders $+ $chr(7) $+ viewcount $+ $chr(7) $+ likecount $+ $chr(7) $+ dislikecount $+ $chr(7) $+ commentcount ; Replace mit dem Wraper befüllen var %replace $yta_request_result($1).publishedat $+ $chr(7) $+ $yta_request_result($1).title $+ $chr(7) $+ $yta_request_result($1).channeltitle var %replace %replace $+ $chr(7) $+ $yta_request_result($1).duration $+ $chr(7) $+ $yta_request_result($1).favoritecount $+ $chr(7) $+ $yta_request_result($1).viewcount var %replace %replace $+ $chr(7) $+ $yta_request_result($1).likecount $+ $chr(7) $+ $yta_request_result($1).dislikecount $+ $chr(7) $+ $yta_request_result($1).commentcount var %dst $yta_request_result($1).dest var %net $yta_request_result($1).network if ( %yta/settings/General/echo == 1 ) { echo -gf %dst $yta_replace_placeholder(%yta/settings/Message/msg, %placeholders, %replace) } else { .msg %dst $yta_replace_placeholder(%yta/settings/Message/msg, %placeholders, %replace) } } ; Entfernt die Spamprotect Variable und Request Variable ; Spamprotect ist fest auf 30 Sekunden einprogrammiert und wenn in der Zeit keine Rückmeldung gekommen ist, ; kann auch die requests Variable verworfen werden ; Argument $1: Spamprotect Variable Identifikation alias yta_request_cleanup { var %tick %yta/spamprot/ [ $+ [ $1 ] $+ /tick ] unset %yta/spamprot/ [ $+ [ $1 ] $+ /* ] unset %yta/ytrequests/ [ $+ [ %tick ] $+ /* ] } ; Settings in die INI schreiben, Timer und Sockets anhalten und globale Variables löschen alias yta_uninstall { yta_save_config sockclose yta/sockets/* var %i 1 while ( %i <= $timer(0) ) { var %tname $timer(%i) if ( yta/timers/ isin %tname ) { .timer $+ %tname off } inc %i } unset %yta/* echo -ag - YouTube Announcer - Das Script ist nun deaktiviert und sollte auf keine YouTube Links mehr reagieren. } ; Wenn das Script entladen wird, uninstall ausführen on *:UNLOAD: { yta_uninstall }
  11. ;===================================================== ; ChatToIRC ; DIVERSE ZAKEN VOOR ChatToIRC ;===================================================== ;===================================================== ; Auteur: JamesBond ; Homepagina: https://chatplezier.com/ ; Netwerk: ChatPlezier ; Server: irc.chatplezier.com ; Email: jamesbond@chatplezier.com ;===================================================== on ^*:notice:*:?: { if ($nick == BotServ) || ($nick == ChanServ) || ($nick == HostServ) || ($nick == MemoServ) || ($nick == NickServ) || ($nick == OperServ) || ($nick == StatServ) { if (!$window($+(@Notice.ChatBot.,$network,.,$cid))) window -ng @Notice.ChatBot. [ $+ [ $network ] ] $+ . [ $+ [ $cid ] ] echo @Notice.ChatBot. $+ $network $+ . $+ $cid $timestamp 08,1[11,01NOTICE08,01.11,01 $+ $nick $+ 08,01] $1- haltdef } else { if ($nick == *status) { if (!$window($+(@Notice.status.,$network,.,$cid))) window -n @Notice.status. [ $+ [ $network ] ] $+ . [ $+ [ $cid ] ] echo -te $+(@Notice.status.,$network,.,$cid) $1- haltdef } else { if (!$window($+(@Notice.,$network,.,$cid))) window -n @Notice. [ $+ [ $network ] ] $+ . [ $+ [ $cid ] ] echo -te $+(@Notice.,$network,.,$cid) 08,1[11,01NOTICE08,01.11,01 $+ $nick $+ 08,01] $1- haltdef } } } on ^*:notice:*:#: { if (!$window($+(@Notice.,$network,.,$cid))) window -n @Notice. [ $+ [ $network ] ] $+ . [ $+ [ $cid ] ] echo @Notice. $+ $network $+ . $+ $cid $timestamp 08,01[11,01NOTICE08,01.11,01 $+ $chan $+ 08,01.11,01 $+ $nick $+ 08,01] $1- haltdef } ederlandse/Dutch uitleg/explanation dit is een simpel notice script dat ik heb gemaakt, dit script zet alle texten van BotServ, ChanServ, HostServ, MemoServ, NickServ, OperServ en StatServ in het venster: Notice.ChatBot.NetWerkNaam als u bvb /bs help typ of /cs help, dan zal het uitleg daarvan op die pagina belanden. ook als u een Commando uitvoert en als hij u iets aangeeft, (dan zal het daar ook belanden). de gewone notice van andere ChatBots komen in een ander venster terecht: Notice.NetWerkNaam ik wens jullie alvast veel plezier met het script mvg Jamesbond ENGELS/English uitleg/explanation this is a simple notice script I made, this script put all text from BotServ, ChanServ, HostServ, MemoServ, NickServ, OperServ and StatServ in the window: Notice.ChatBot.NetWerkName For example, if you type / bs help or / cs help, the explanation will end up on that page. even if you execute a Command and if he tells you something, (it will also end up there) the normal notice from other ChatBots ends up in another window: Notice.NetWerkName
  12. In early November, a developer contributing to Google's open-source Chromium project reported a problem with Oilpan, the garbage collector for the browser's Blink rendering engine: it can be used to break a memory defense known as address space layout randomization (ASLR). About two weeks later, Google software security engineer Chris Palmer marked the bug "WontFix" because Google has resigned itself to the fact that ASLR can't be saved – Spectre and Spectre-like processor-level flaws can defeat it anyway, whether or not Oilpan can be exploited. Or as Palmer put it, "we already have to plan for a world in which ASLR is bypassable." On Wednesday, Chromium's bug tracking bot lifted the curtain on the previously private discussion and made it publicly accessible. Security researchers have been warning about the shortcomings of ASLR for years. The defense mechanism works by placing parts of software in randomly selected regions of the code's memory address space, and these positions change every time the software is started. This makes life hard for those writing malware that exploits vulnerabilities in applications and operating systems: the miscreants can't be sure where components needed to attack the code are located in memory, and their exploits will fail to work. But, as we said, ASLR is not bombproof. It simply increases the barrier miscreants have to jump over before they can hack a victim's system. In a 2017 paper, Vrije Universiteit Amsterdam researchers wrote, "ASLR is fundamentally flawed in sandboxed environments such as JavaScript and future defenses should not rely on randomized virtual addresses as a building block."
  13. YouTube has long had a version of its mobile app called YouTube Kids that provides a limited experience for kids in terms of videos they can watch on the platform. The app is meant to ensure that children aged four years and above watch only age-appropriate content and set a limit to their screen time. For teens and preadolescents, YouTube acknowledges they have a different kind of need for learning and creativity. That is why the service is introducing a new capability that will allow parents to control the type of content teens and tweens can watch through a supervised account. The new experience will launch in beta over the next few months and parents will have the option to choose from any of three different levels of access to YouTube: Explore, Explore more, and Most of YouTube. "Explore" is for children aged nine and above who are ready to use the main YouTube app and discover various types of content such as tutorials, gaming videos, music clips, news, and educational videos, among others. The second level allows kids aged 13 years and above to watch a broader set of content and live streams similar to those available under Explore. "Most of YouTube" provides access to almost every type of content, save for age-inappropriate videos. More Here
  14. We already know that Bill Gates made the jump to Android back in 2017, presumably from Windows phones. At that time, Gates just stated that he uses an Android device with "lots of Microsoft software", and does not use an iOS handset. Now, the business magnate has revealed why he prefers Android over iOS. In an interview with journalist Andrew Ross Sorkin on Clubhouse, Gates went on to say that: While Gates may prefer Android because of the flexibility it offers and the ecosystem, Clubhouse is still currently an invite-only app currently available just on iPhones. Although Bill Gates has been using Android phones for the past several years, he has previously expressed disappointment at how Microsoft missed the mobile race, calling it his "greatest mistake". Source: MacRumors
  15. Microsoft is almost as keen to kill off Legacy Edge, Windows 10's original great browser hope, as it is to stomp on the ancient Internet Explorer – because it looks like it'll be sticking around on the Surface Hub. Ostensibly a celebration of the fact that the Windows 10 Team 2020 update would finally go worldwide (for Surface Hub 2S devices at least) on 23 February, the announcement seemed to hold hope for users still clinging to the obsolete browser. Earlier this month the company warned Windows 10 users that Legacy Edge would drop out of support in March and eventually be stripped from the operating system in favour of Chromium Edge as part of the April update. Although the company insisted that "Microsoft Edge Legacy will no longer be on devices" after the update is applied, the rendering engine behind the scenes – EdgeHTML – will linger on. It seems that users of Microsoft's fancy whiteboard will be given a little extra time with the browser. While users are encouraged to install Chromium Edge, "the Microsoft Edge Legacy browser will remain the default browser on Surface Hubs until its replacement in a future update More Here
  16. More HereThe U.S. Department of Justice (DoJ) on Wednesday indicted three suspected North Korean hackers for allegedly conspiring to steal and extort over $1.3 billion in cash and cryptocurrencies from financial institutions and businesses. The three defendants — Jon Chang Hyok, 31; Kim Il, 27; and Park Jin Hyok, 36 — are said to be members of the Reconnaissance General Bureau, a military intelligence division of North Korea, also known as the Lazarus group, Hidden Cobra, or Advanced Persistent Threat 38 (APT 38). Accusing them of creating and deploying multiple malicious cryptocurrency applications, developing and fraudulently marketing a blockchain platform, the indictment expands on the 2018 charges brought against Park, one of the alleged nation-state hackers previously charged in connection with the 2014 cyberattack on Sony Pictures Entertainment. A Wide-Ranging Scheme to Commit Cyberattacks and Financial Crimes "North Korea's operatives, using keyboards rather than guns, stealing digital wallets of cryptocurrency instead of sacks of cash, are the world's leading bank robbers," said Assistant Attorney General John C. Demers of the Justice Department's National Security Division.
  17. The PC industry is expected to release 40 new Chromebook models this year, according to Google. This is almost certainly driven by sky-high demand for the basic computing devices, which are especially popular in classrooms home schooling. For context, Chromium.org lists just 20 new Chromebook releases during 2020. During 2019, 39 new releases were listed, although may of these were effectively different permutations of the same device, with only minor differences in terms of processor used, etc. Google said it plans to issue a major overhaul of Chrome OS in March, with the main focus on education users. Users will be able to natively record their screens without having to rely on a third-party plugin, such as Screencastify. Parental controls will be a focus, allowing students to link their personal accounts (which may have restrictions on usage) to their education workspace. Separately, the Chocolate Factory said is launching an admin console designed for the speedy provision and management of new Chromebook devices. This follows an earlier promise made by Google in 2020 to provide new Chromebook devices with at least eight years of software updates. Support was previously something of a mixed bag, with machines typically getting between five and six years of updates. While you can use a Chromebook after its EOL point, security patches and site compatibility will be a major concern (although this can be minimised somewhat by using Linux in a chroot environment, like Crouton). You may also encounter issues using Android apps, should they require a newer version of the Android API than the one supported on your particular device. As previously noted, 2020 was a bumper year for Chromebook sales, with pent-up demand from personal and education customers sending the segment soaring past the Mac. In terms of purchasing activity, it is now the second-largest traditional computing category. Analyst data bears this out, with Canalys reporting 287 per cent year-on-year growth during Q4 2020, with shipments hitting 11.2 million. More Here
  18. oday, Microsoft announced its next big Long-Term Servicing Channel (LTSC) releases, which means that they're supported for longer. Both Office and Windows 10 are typically on the Semi-Annual Channel (SAC), which gets feature updates every six months. LTSC releases come every few years. Essentially, both Office and Windows 10 are getting their LTSC releases later on this year. That's what it all adds up to, so for Windows 10, it's going to be the 21H2 release of the OS. There's also a new perpetual license version of Office coming, something that we've known since September, but now we know that it's going to be called Office 2021. The difference with a perpetual license version is that if you buy Office 2021, you own it forever, as opposed to a subscription model where you lose it if you stop paying. Of course, with Office 2021, you don't get new features over time. Office 2021 replaces Office 2019, and it's the first time that the name has increased by any amount of years instead of three in about a decade and a half. Read More Here
  19. So I"ve Been Playing with Kvirc client and really looked into it and started learning on how to modify it to fit my needs and its finally a part of it has been done. I have implemented my own icon to show on any server who is a legit IRCop. also added room icons and continue to do so with all servers.
  20. Was given this to play with and try to translate it and pass it on to people that love or miss MSN can use this!!
  21. After Twitter permanently suspended Donald Trump’s account, earlier this month, the reactions were quick, ubiquitous, and mostly predictable. Many of the takes seemed canned, the way an obituary of a terminally ill celebrity is often pre-written. On the Trump-apologist right, the suspension was denounced as Orwellian tyranny, deep-state collusion, or worse. (Glenn Beck, during a segment on Tucker Carlson’s Fox News show, compared the Trump ban and other Big Tech crackdowns to “the Germans with the Jews behind the wall. They would put them in the ghetto. Well, this is the digital ghetto.”) Among Trump’s opponents, reactions were more mixed. There was a good amount of gloating—the only thing easier than kicking a man when he’s down is dunking on an account after it’s locked—but the Schadenfreude was tempered with caution. Jameel Jaffer, the director of the Knight First Amendment Institute at Columbia, neatly summarized the tension (in a tweet, naturally): “It’s coherent—and in my view absolutely appropriate—to believe both that (i) the social media companies were right to suspend Trump’s accounts last week; and (ii) the companies’ immense power over public discourse is a problem for democracy.” In another tweet, he added, “The First Amendment question is easy. All the other questions are hard.” Read more Here
×
×
  • Create New...