Sajoin automatique avec une database
#1
Bonjour,
Je vient ici pour trouver un peu d'aide, en effet j'ai voulu créer un sajoin automatique envers les utilisateurs enregistrer dans une base de donnée ".db" mais je n'y arrive pas et je doit dire que je me tire les cheuveux.

Les enregistrements dans la base de donnée ce font ligne par ligne sous la forme :
Code :
pseudo@#salon
pseudo2@#salon,#salon2

Malheuresement j'ai l'impression qu'il ne lis pas ce qui ce trouve dans la base de donnée avec mon code tcl donc j'ai du surement raté la mise en page de la lecture de la base de donnée à la connexion ... donc le voici:

TCL
proc nicksaj {nick salon} {
    set uservip "[fread [clams:install_directory]sources/sajoin.db]"
	set llistsaj [llength $uservip]
	set i "0"
	while { $i <= $llistsaj } {
	set pseudo [lindex [split [lindex $uservip $i] "@"] 0]
	if {[string match -nocase $nick $pseudo]} {
	set salon [lindex [split [lindex $uservip $i] "@"] 1]
    if {[isindb $uservip $salon]!= -1} {
    putdcc $::clams(idx) ":[clams:server] SAJOIN $pseudo $salon"
    }
	incr i
	}
	return 1
	}
}

###################
# Clams Scriptdir #
###################
set ::clams(path) "[file dirname [info script]]/"
 
proc clams:install_directory {} { 
return $::clams(path) 
}


Répondre
#2
Je ne connais pas ta commande fread, je la soupçonne de mal faire la lecture. Et je ne comprends pas ton tcl: quand est appelée nicksaj ? Tu sembles t'être compliqué la vie.
Répondre
#3
Nicksaj est appellé a chaque connexion au serveur (soit quand une personne rejoin n'importe quel salon).
Et je me complique toujours la vie sinon sa serais pas drole pour apprendre ^^
Répondre
#4
Pour ma part, j'aurais fait un système qui charge le fichier en mémoire quand nécessaire (au start/rehash de l'egg ou lors de l'ajout/la suppression d'un vip) du genre:
TCL
proc init:vip {} {
   set fp [open "somefile" r]
   set file_data [read $fp]
   close $fp
   set data [split $file_data "\n"]
   foreach line $data {
      set infos [split $line "@"]
      set ::vip([string tolower [lindex $infos 0]]) [lindex $infos 1]
   }
}


Et ta procédure est alors simplifiée en:
TCL
proc nicksaj {nick salon} {
   if {![info exists $::vip([string tolower $nick])]} { return 0; }
   set chans [split $::vip([string tolower $nick]) ","]
   if { [lsearch $chans $salon] != -1 } {
      putdcc $::clams(idx) ":[clams:server] SAJOIN $pseudo $salon"
   }
   return 1
}


Répondre
#5
Ah ouai javou que ces enormement simplifié par rapport a mon code.
Je vais essayer, de finir ça et si sa marche je posterais tout ici sa poura etre utile a certains ^^
Répondre
#6
Finalement comment j'ai dit je poste le code fait via l'aide d'un ami, ce code est largement plus simple que mon precedent et utilise une base de donnée sql

TCL
if {[issajoin $user]} {
        service:connect
		mysqlsel $::mysqlink "SELECT * FROM `votre_db` WHERE cible = '$user' ORDER BY id"
		if {[mysqlresult $::mysqlink rows] ne 0} {
		while {[set row [mysqlnext $::mysqlink]] ne ""} {
		set salonstaff [lindex $row 2]
		set chans [lindex $row 3]
		set cible [lindex $row 1]
		putdcc $::clams(idx) ":[clams:server] SAJOIN $cible $chans [clock seconds]"
		}
		} else {return 0;}
		service:deconnect



et voici la table

Code :
CREATE TABLE IF NOT EXISTS `clams_sajoins` (
  `id` int(11) NOT NULL auto_increment,
  `cible` varchar(255) NOT NULL default '',
  `salonstaff` text NOT NULL,
  `salonsajoin` text NOT NULL,
  `user` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté