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 : 5 648

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 !
 

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

Commentaires et avis

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 dans le forum

Compte à rebours... [ par The_magicien ] Bonjour &#224; tous! Je voudrais savoir si il &#233;tait possible d'effectuer un compte &#224; rebours en php (car je voudrais ins&#233;rer des variab Bonjour [ par r3frag ] Bonjour a tousOu pourrai je trouver ( ou quelqu'un a t il ce script ) un script en PHP de compte a rebours sur une periode de 24 H ? puis remise a zer Compte à rebours avec mysql [ par aurelie95 ] Bonjour à tous,Je sollicite votre aide pour mon projet, j'explique :Je veux que que quand ma page temps.php est chargé, il rentre la date complète dan Besoin d'aide, comparaison de temps [ par acidest ] Bonjour, pour mon jeu en ligne je souhaiterai créer une banque, tout es prêt sauf un petit truc :Dès que l'on dépose des ressources (jeu style OGame.. Compt à rebours quotidien [ par habroc ] Bonjour , Je galère depuis plusieurs jours ...Je cherche un script qui me permette de réaliser un compte à rebours en Heures , minutes , secondes jusq MicroPaiements vs WHMCS [ par HuRRR ] Bonjour à tous et à toutes. Je suis très heureux d'être désormais membre de cette communauté, car j'ai un petit soucis côté site web, et je compte bie Nombre de jours écoulés [ par bidaya ] Bonjour, je souhaiterais créer un mini-site d'une page qui donne en temps réel le nombre de jours écoulés entre une date (exemple 4 mars 2009) et le j Mise à jours de champs mysql 1+0,1 depuis requête php [ par stella2809 ] Bonjourvoici ma question :Je souhaiterais mettre à jours un champs de table MySql valeure actuelle + 0,1 et je bug :)champs mysql : <td al Incrémenter ou décrémenter une variable mysql quotidiennement [ par cdie ] Bonjour à tous, Je suis entrain de faire un site web et je fais face à un petit problème. Effectivement, j'aimerais que toute les 24h (donc une fois reservation en temps réel [ par tiwtiwa11 ] salut les amis(es) Je suis entrain de faire un projet en PHP/Mysql sur les réservations des riads je dois affecter à chaque chambre un calendrier


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.