begin process at 2012 02 11 15:52:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > COMPTEUR DE JOURS RESTANTS DANS LE TOPIC D'UN CHANNEL IRC (À ÉXÉCUTER AVEC CRON)

COMPTEUR DE JOURS RESTANTS DANS LE TOPIC D'UN CHANNEL IRC (À ÉXÉCUTER AVEC CRON)


 Information sur la source

Note :
Aucune note
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 :8 045

Auteur : Elektordi

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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

 Sources du même auteur

Source avec une capture CONVERTISSEUR CODES COULEUR ET STYLE SH (TTY) EN HTML
Source avec Zip GESTION DE SERVICES WINDOWS ET D'ÉXÉCUTABLES DEPUIS UNE PAGE...
Source avec Zip GESTIONNAIRE D'IMAGES POUR INTERFACE D'ADMIN

 Sources de la même categorie

Source avec Zip TAPI : METTRE EN RELATION DEUX POSTES TELEPHONIQUES par ravery
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip VALIDATEUR_3WC par lezj
Source avec Zip MYGGL GOOGLE API CLASS FOR BEGINERZ par lezj
CLASSE WIKILOC par aKheNathOn

 Sources en rapport avec celle ci

FORMULAIRE D'ENREGISTREMENT NICKSERV par foxange
Source avec Zip Source avec une capture GESTIONNAIRE DE COMPTE BANCAIRE par Ayiana
DIFFÉRENCE ENTRE DEUX DATE EN JOURS (LISTE RÉCUPÉRÉE DANS UN... par DevilTN
Source avec Zip Source avec une capture CALENDRIER + AGENDA TRÈS SIMPLE (GERER LES JOURS FÉRIÉS ET L... par mondherclubiste
Source avec Zip Source avec une capture BOT IRC POO par divx78

Commentaires et avis

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

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

Commentaire de coockiesch le 12/03/2007 19:13:52

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

@++

R@f

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 '...

Commentaire de coucou747 le 13/03/2007 07:35:58 administrateur CS

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 Compte à rebours sur image dynamique [ par Piouxel ] Je sais que ça fait complètement jacky ou mémère, mais je veux savoir comment ça marche. Donc pour en venir au sujet : comment faire ces petits compt Aide pour affichage d'un compte à rebours [ par donkeykong ] Bonjour à tous. Je suis débutant en PHP et pour m'initier j'ai voulu créer une petite page sans trop me prendre la tête (et qui n'a aucune utilité pu compte a rebours [ par youvalcsharpp ] Bonsoir, Comment faire un compte a rebours dynamique en Php? Je soihaite aller de 45minutes jusqu'a 0secondes Merci beaucoup Scrip pour un compte à rebours un peu spécial [ par scampy ] Bonjour, Je voudrais mettre sur mon site un compte à rebours de ce genre : Dans 6h 16mn 7s : clôture du NYSE idem pour les autres (CAC 40, Dow Jones,


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales