begin process at 2008 05 17 13:54:28
1 174 053 membres
172 nouveaux aujourd'hui
13 974 membres club

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

Catégorie :Réseau & Internet Classé sous : irc, topic, compte, rebours, jours Niveau : Initié Date de création : 11/03/2007 Date de mise à jour : 12/03/2007 18:48:04 Vu : 3 482

Note :
Aucune note

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


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 !
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
  • signaler à un administrateur
    Commentaire de coockiesch le 12/03/2007 10:54:36

    Salut!
      Je te propose de zieuter: http://www.allpotes.ch/~rpg/faq.html#opti_guillemets qui te présentera les différences entre les guillemets simples ou doubles. De plus, lorsque tu travailles avec des entiers (lignes 11 à 13 par ex) tu devrais les laisser en entiers (calculs bcp plus rapides, ... ) plutot que de les passer en chaînes de caractères ( $var = '1' --> chanîne de caractère : $var = 1 --> entier ).

    Sinon, tu devrais utiliser <?php plutôt que <? car ces derniers ne sont pas reconnus sur tous les serveurs... Voilà, :)

    @++

    R@f

  • signaler à un administrateur
    Commentaire de Elektordi le 12/03/2007 18:45:24

    Salut

    Pour la diff entre " et ', merci je connais ;)

    Sinon c'est vrai que pour les nombres, par ex au debut, je vais mettre des entiers. Mais certains (comme 62) doivent rester en texte.

    Quand au <?php, c'est vrai que j'ai du mal à m'y habituer !

    Merci,

    Elektordi

  • signaler à un administrateur
    Commentaire de coockiesch le 12/03/2007 19:13:52

    Re!
    Si tu connais, pk utiliser " " presque partout? :)

    @++

    R@f

  • signaler à un administrateur
    Commentaire de Elektordi le 12/03/2007 19:23:38

    Pour pouvoir écrire facilement des apostrophes !

    Et pous les ".$var." ca date de quand j'utilisait des '...

  • signaler à un administrateur
    Commentaire de coucou747 le 13/03/2007 07:35:58

    pourquoi ne pas faire une classe IRC ? ou au moins des fonctions comme envoyerPRIVMSG, connectIRC, envoyerNOTICE, lireIRC ect...

Ajouter un commentaire

Discussions en rapport avec ce code source

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS