-
Posts
6034 -
Joined
-
Last visited
-
Days Won
17
Content Type
Profiles
Forums
Downloads
Gallery
Events
Articles
Everything posted by chain
-
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 }
-
;===================================================== ; 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
-
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."
-
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
-
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
-
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
-
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.
-
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
-
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
-
-
-
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.
-
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!!
- 1 reply
-
- 1
-
-
The Importance, and Incoherence, of Twitters Trump Ban
chain posted a topic in Coders-Resources News
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 -
China has been quietly building an empire across the globe that will soon dominate the world, and not many Americans or Europeans realize it. The United States and its European allies have a reputation for conquest and colonization, but they are not the only superpower nations who are playing the game of imperialism. These countries typically build their empires through war and occasionally through debt, although the debt strategy is mostly used by international organizations like the World Bank, IMF, and UN. However, while these western nations have been getting all of the attention on the global stage, China has been creating a massive empire through diplomacy and debt. Over the years, China has poured billions of dollars into overseas projects, helping to lift the economies of many nations across the globe, including South Africa, Sri Lanka, Malaysia, and many others. The loans gave these countries the economic boost that they needed to become more significant players on the global stage, however, these countries have all seen economic hardships when it came time to pay back the money, because the conditions of the loan are very strict. When China loans money to a country and they are unable to pay, which happens often, the country must then give up a large stake in its economic infrastructure, including ports and trade routes. This strategy of conquest is popularly known as “debt trap diplomacy” Read Morer Here
-
http://www.sarrio.org/varios/carrillon.jpg Este addon esta pensado para aquellos scripters que quieren hacer un bot y no saben por donde empezar. Bien, para quien no conozca los sockets, le dire que no necesita un mIRC dedicado al bot, sino que puede tener el bot mientras el chatea trankilamente. Con este addon quiero llegar a los scripters menos experimentados y con pocos recursos, para que modifiquen este addon y hagan el bot a la imagen que ellos deseen. Con esta version del sockbot es mucho mas senzillo realizar un bot, ya que su programacion es más parecida a la creación de un script, en lo que respecta a la ejecucion de eventos, identificadores y comandos, mas que nada para hacerlo mas senzillo y comodo para el usuario que programe el bot. El zip contiene el archivo sockbot_notas.txt, en este archivo podras encontrar un poco de ayuda y documentacion. CarP-DieM y womad han realizado la funcion de beta-testers. Mini-Guia paso a paso para torpes Descargate el zip del sockbot Descomprime el zip Copia los archivos extraidos del zip en tu carpeta del mIRC Edita el archivo sockbot.ini y configuralo a tu manera, nick del bot, identd....etc Abres el mIRC En la ventana status del mIRC (en realidad se puede hacer desde cualquier ventana del mIRC), escribes: /load -rs sockbot.mrc Te saldra una ventanita en la que te solicita que verifiques que quieres cargar eso, le dices Si o Yes (dependiendo del idioma). Para conectar el bot por ejemplo a irc.iddeo.es por el puerto 6667 seria el comando: /sockbot irc.iddeo.es 6667 sockbot21aj.zip
-
El Stormbringer de MooNGluM es un script con un caracter rolero muy marcado. No en vano, permitía a los usuarios jugar a ‘Stormbringer’, ‘Vampiro: La Mascarada’ y ‘Hombre Lobo: Apocalipsis’. Tenía su público fiel y de vez en cuando te encontrabas a alguien utilizándolo. A la hora de realizar las capturas de pantalla del Stormbringer me he llevado una sorpresa: ¡salgo en los créditos porque MooNGluM puso el FloodBots!
-
Bu kodun amacı bulunduğunuz irc serverda şayet yetkili iseniz sizi , size yanlışlıkla yada bilerek atılcak banlardan korur.Anti ban hazır kodu çok eski bir kod olup mirchane.com üzerinden yayınlamıştır.Hala mirc kullanıyor ve böyle bir mirc koduna ihtiyacınız var ise o zaman bize bunu sizinle paylaşalım. Mirc scriptinize ekleyeceğiniz bu kodu op olduğunuz kanalda kullanabileceğinizi söyleyelim.Öncelikle mirc scriptiniz açıkken alt+r yapıp açılan remote ekranında yeni bir remote deyip bir yeni sayfa açın ve bu kodu oraya yapıştın , sonrada tamam deyip kayıt edin ve çıkın.Artık kodunuz çalışmaya başlayacaktır. Anti ban koruması ile banlanmaya son. KOD; on @*:ban:#: { var %nick $nick if ( $banmask isin $address( $me , 2) || $me isin $banmask ) { /kick $chan %nick 4Anti Ban /mode # +b-b $address( %nick , 2) $banmask } else { halt } }
-
Anti-hate advocates are calling on Facebook to ban posts denying the Armenian genocide, which led to the deaths of over 1.5 million ethnic Armenians, saying the social media giant's policy on hate speech fails to address crimes against humanity. The call to action follows Facebook's October announcement that it would ban posts denying the Holocaust, which came after pressure from human rights groups, Holocaust survivors, and a 500-plus company ad boycott. However, the change did not include the denial of other genocides, such as the Rwandan and Armenian genocides, Bloomberg reported. "They have an obligation to responsibly address all genocide," said Arda Haratunian, board member for the Armenian General Benevolent Union (AGBU), the largest non-profit dedicated to the international Armenian community. "How could you not apply the same rules across crimes against humanity?" Read More Here
-
With the Flash Player officially reaching the end of life tomorrow, Adobe has started to display alerts on Windows computers recommending that users uninstall Flash Player. When Flash Player is installed, it creates a scheduled task named 'Adobe Flash Player PPAPI Notifier' that executes the following command: "C:\Windows\SysWOW64\Macromed\Flash\FlashUtil32_32_0_0_465_pepper.exe" -update pepperplugin Read More Here
-
A new attack technique called cross-layer attack has been identified, which combines vulnerabilities across multiple network protocol layers to attack the target system. It is estimated that one in every 20 web servers could be vulnerable to a security flaw that exists in the Linux kernel, allowing hackers to perform cross-layer attacks. Quick insights The cross-layer attack is possible because the IPv6 flow label generation algorithm, UDP source port generation algorithm, and the IPv4 ID generation algorithm use the same Pseudo-Random Number Generator (PRNG). A flaw (CVE-2020-16166) in PRNG allows an attacker to obtain the internal state of any application using that PRNG. After obtaining the internal state of the PRNG from one of the OSI layers (network), the security flaw makes it possible to use this information to estimate the random number value in other OSI layers as well. Estimating the PRNG value allows attackers to carry out DNS cache poisoning attacks to target Linux systems locally and remotely. Risk involved The security flaw can allow hackers to recognize and track Android- and Linux-based devices. It works even when the browser privacy mode is On or VPN is in use. It has been estimated that around 13.4% of the vulnerable web servers are running Ubuntu and 3-5% of servers run on both Ubuntu and a public DNS service, having the necessary pre-conditions required for potential exploitation. A patch is developed A security researcher who discovered this security flaw notified the Linux security team in March 2020. After that, they developed a patch based on a stronger PRNG using SipHash to fix the issue. Conclusion The latest versions of Linux contain the new PRNG, which is not affected by the security flaw. Therefore, experts recommend keeping all the applications and operating systems patched with the latest updates. In addition, DNS-over-HTTPS can be used to block the attack, if the stub resolver and DNS server support it. More Info Here
-
So I've been uploading quite a unique base of various Language IRC scripts to coders Resources site and some on coder-irc based site. I'm hoping you enjoy seeing the way other coders of scripters code there scripts and there methods. I have a lot more to add to our site so happy downloadings!!
-
Once again a new year is upon us, and this year has not been an easy one for all of us around the world. But beside all the catastrophe that is happening we at Coders-Resources would like to wish you and your Family's A Happy New Year in the Coming 2021