Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
COMPTEUR DE JOURS RESTANTS DANS LE TOPIC D'UN CHANNEL IRC (À ÉXÉCUTER AVEC CRON)
Information sur la source
Description
Ce script met à jour le topic d'un chan IRC à chaque appel. Il permet de gérer la maj d'un compte à rebours. La config se fait en haut du fichier. Le script a été fait pour se connecter à QuakeNet. Pour un autre réseau, vous risquez de devoir retoucher le protocole ainsi que de remplacer le système d'auth. Pour l'automatiser, vous devez appeler ce script depuis un démon cron on assimilé (ou http://www.webcron.org/) Les sleep(x) servent à ne pas se faire bannir du serveur IRC pour "Excess Flood" (trop de données à la suite). Le reste du topic est conservé ! Le script ne change que la partie "J-xxx" ou ne fait rien si cette partie n'existe pas.
Source
- <?php
-
- $user = "PhpPooler";
- $nick = "gdz|GodzilanBot";
- $chan = "#godzilan";
-
- $q_user = "QuakenetUser";
- $q_pass = "QuakenetPassword";
-
- // Godzilan 3: 26 octobre 2007
- $jour = 26;
- $mois = 10;
- $annee = 2007;
-
- // FIN CONFIG
-
- //euroserv.fr.quakenet.org:6667
- // Timeout de 15s
-
- if (!($fp = @fsockopen("euroserv.fr.quakenet.org", 6667, $errno, $errstr, 15)))
- {
- die("Connect failed.");
- }
-
- function vide_buffer($s)
- {
- $status["unread_bytes"] = 1;
- while($status["unread_bytes"])
- {
- fgetc($s);
- $status = socket_get_status($s);
- }
-
- }
-
- function cancel($s,$reason)
- {
- fputs($s, "QUIT :Abort\r\n");
- sleep(1);
- die("Operation cancelled: ".$reason);
- }
-
- sleep(1);
- vide_buffer($fp);
- fputs($fp, "NICK ".$user."\r\n");
- sleep(1);
- while(fread($fp, 5)!="PING ");
- $ping = trim(fread($fp, 11),"\r\n");
- sleep(1);
- fputs($fp, "PONG ".$ping."\r\n");
- sleep(1);
- fputs($fp, "USER ".$user." 0 0 :Elektordi's PHP Pooler\r\n");
- sleep(3);
- vide_buffer($fp);
- fputs($fp, "NICK ".$nick."\r\n");
- sleep(3);
- while(fread($fp, 1)!="~");
- vide_buffer($fp);
- fputs($fp, "TOPIC ".$chan."\r\n");
- sleep(1);
- $data=fread($fp, 1024);
- $p0 = strpos($data, "332");
- if($p0===FALSE) cancel($fp,"Can't get topic !");
-
- $p1 = strpos($data, ":",$p0);
- $p2 = strpos($data, "\n",$p1);
- $topic = rtrim(substr($data,$p1+1,$p2-$p1),"\r");
-
- $topic0 = $topic;
-
- $p1 = strpos($topic, "J-");
- if($p1===FALSE) cancel($fp,"No 'J-' in topic !");
-
- $p2 = strpos($topic, " ", $p1);
-
- // compte à rebours
- $le_jour = date("j");
- $le_mois = date("n");
- $l_annee = date("Y");
- $duree_restante=round((mktime(0, 0, 0, $le_mois, $le_jour, $l_annee)-mktime(0, 0, 0, $mois, $jour, $annee))/(24*60*60));
- if ($duree_restante<)
- {
- $decompte_affiche = "J".$duree_restante;
- }
- else $decompte_affiche = "* Jour J *";
-
- // affichage du compte à rebours
-
- $topic = substr_replace($topic,$decompte_affiche,$p1,$p2-$p1);
-
- if($topic==$topic0) cancel($fp,"Already up to date.");
-
- sleep(1);
- fputs($fp, "PRIVMSG Q@CServe.quakenet.org :AUTH ".$q_user." ".$q_pass."\r\n");
- sleep(1);
- fputs($fp, "JOIN ".$chan."\r\n");
- sleep(1);
- while(fread($fp, 2+strlen($nick))!="o ".$nick)
- {
- while(fread($fp, 1)!="+");
- }
- sleep(1);
- fputs($fp, "TOPIC ".$chan." :".$topic."\r\n");
- sleep(1);
- fputs($fp, "QUIT :Cron Job Done\r\n");
-
- echo "Topic changed to: ".$topic;
-
- ?>
<?php
$user = "PhpPooler";
$nick = "gdz|GodzilanBot";
$chan = "#godzilan";
$q_user = "QuakenetUser";
$q_pass = "QuakenetPassword";
// Godzilan 3: 26 octobre 2007
$jour = 26;
$mois = 10;
$annee = 2007;
// FIN CONFIG
//euroserv.fr.quakenet.org:6667
// Timeout de 15s
if (!($fp = @fsockopen("euroserv.fr.quakenet.org", 6667, $errno, $errstr, 15)))
{
die("Connect failed.");
}
function vide_buffer($s)
{
$status["unread_bytes"] = 1;
while($status["unread_bytes"])
{
fgetc($s);
$status = socket_get_status($s);
}
}
function cancel($s,$reason)
{
fputs($s, "QUIT :Abort\r\n");
sleep(1);
die("Operation cancelled: ".$reason);
}
sleep(1);
vide_buffer($fp);
fputs($fp, "NICK ".$user."\r\n");
sleep(1);
while(fread($fp, 5)!="PING ");
$ping = trim(fread($fp, 11),"\r\n");
sleep(1);
fputs($fp, "PONG ".$ping."\r\n");
sleep(1);
fputs($fp, "USER ".$user." 0 0 :Elektordi's PHP Pooler\r\n");
sleep(3);
vide_buffer($fp);
fputs($fp, "NICK ".$nick."\r\n");
sleep(3);
while(fread($fp, 1)!="~");
vide_buffer($fp);
fputs($fp, "TOPIC ".$chan."\r\n");
sleep(1);
$data=fread($fp, 1024);
$p0 = strpos($data, "332");
if($p0===FALSE) cancel($fp,"Can't get topic !");
$p1 = strpos($data, ":",$p0);
$p2 = strpos($data, "\n",$p1);
$topic = rtrim(substr($data,$p1+1,$p2-$p1),"\r");
$topic0 = $topic;
$p1 = strpos($topic, "J-");
if($p1===FALSE) cancel($fp,"No 'J-' in topic !");
$p2 = strpos($topic, " ", $p1);
// compte à rebours
$le_jour = date("j");
$le_mois = date("n");
$l_annee = date("Y");
$duree_restante=round((mktime(0, 0, 0, $le_mois, $le_jour, $l_annee)-mktime(0, 0, 0, $mois, $jour, $annee))/(24*60*60));
if ($duree_restante<)
{
$decompte_affiche = "J".$duree_restante;
}
else $decompte_affiche = "* Jour J *";
// affichage du compte à rebours
$topic = substr_replace($topic,$decompte_affiche,$p1,$p2-$p1);
if($topic==$topic0) cancel($fp,"Already up to date.");
sleep(1);
fputs($fp, "PRIVMSG Q@CServe.quakenet.org :AUTH ".$q_user." ".$q_pass."\r\n");
sleep(1);
fputs($fp, "JOIN ".$chan."\r\n");
sleep(1);
while(fread($fp, 2+strlen($nick))!="o ".$nick)
{
while(fread($fp, 1)!="+");
}
sleep(1);
fputs($fp, "TOPIC ".$chan." :".$topic."\r\n");
sleep(1);
fputs($fp, "QUIT :Cron Job Done\r\n");
echo "Topic changed to: ".$topic;
?>
Conclusion
Script codé en 2h chrono... (Cela explique le protocole "bourrin")
Deux petits rappels avant que vous ne l'utilisiez: - Très peu d'hébergeurs gratuits ouvrent le port 6667 (ou autre) en sortie ! - Par défaut, un script php arrète de s'éxécuter au bout de 30 secs !
Historique
- 11 mars 2007 15:51:27 :
- Oubli dans la description
- 12 mars 2007 18:48:04 :
- Passage en entiers de la date, changement de la balise en <?php
Sources de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|