Problème base de donnée

Tout ce qui concerne la configuration et l'administration des serveurs.
Rendez-vous dans Outils de communication & communautaires pour la conception de sites Internet.
Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Problème base de donnée

Message par General » 16 sept. 2014, 14:17

Bonjour,


J'ai me suis fait un plugin qui à pour bute d'afficher le nombre de joueurs connecter sur mes serveurs

Un exemple:

!infoserver <nom_du_serveur>

say: Nombre de joueurs sur nom_du_serveur: xxx/xxx

Sauf que moi aulieu de prendre les lignes en python simple, je me suis servis de ligne sql. Donc un autre exemple:

Si le joueur ce connecte on ajoute +1 (dans la donné phpmyadmin)
Si le joueur ce déconnecte on ajoute -1 (dans la donné phpmyadmin)

Mais le seule souci c'est que j'aimerai ajouté c'est plugin sur tout mes serveurs et de pouvoir selectionné sur plusieurs donné phpmyadmin pour avoir les donné d'un autre serveur.


Je sais pas si j'arrive à me faire comprendre :( mais j'aimerai avoir une solution merci.
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 16 sept. 2014, 20:04

def onStartup(self):
# get the admin plugin so we can register commands
self.registerEvent(b3.events.EVT_CLIENT_DISCONNECT)
self.registerEvent(b3.events.EVT_CLIENT_AUTH)
self.registerEvent(b3.events.EVT_GAME_EXIT)
self._adminPlugin = self.console.getPlugin('admin')
self.query = self.console.storage.query


if not self._adminPlugin:

self.error('No se pudo encontrar el plugin de administracion')
return
else:

# Register commands
self._adminPlugin.registerCommand(self, 'infoservers', 0, self.cmd_infoservers, 'is')

if 'commands' in self.config.sections():
for cmd in self.config.options('commands'):
level = self.config.get('commands', cmd)
sp = cmd.split('-')
alias = None
if len(sp) == 2:
cmd, alias = sp
func = self.getCmd(cmd)
if func:
self._adminPlugin.registerCommand(self, cmd, level, func, alias)

def getCmd(self, cmd):
cmd = 'cmd_%s' % cmd
if hasattr(self, cmd):
func = getattr(self, cmd)
return func

return None

def onEvent(self, event):

if(event.type == b3.events.EVT_CLIENT_AUTH):
q=('UPDATE `infoserv` SET `slots` = slots+1')
self.console.storage.query(q)


elif(event.type == b3.events.EVT_CLIENT_DISCONNECT):
q=('UPDATE `infoserv` SET `slots` = slots-1')
self.console.storage.query(q)


cursor.close()





def cmd_infoservers(self, data, client, cmd=None):
q=('SELECT * FROM `infoserv`')
cursor = self.console.storage.query(q)
r = cursor.getRow()
slots = r['slots']
client.message('^7Nombre de joueurs:^3 %s/26' % (slots))
cursor.close()
return True
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 16 sept. 2014, 20:05

Pour le moment je fait comme sa, mais si je veux récupéré les infos dans la base de donné de ce serveur et les retransmettre dans un autre serveur comment faire ?
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
derfull
Participant Powerban
Messages : 273
Enregistré le : 16 juil. 2008, 00:20

Re: Problème base de donnée

Message par derfull » 17 sept. 2014, 00:57

Pour B3 tu as le plugin status qui fait déjà ça si je ne me trompe pas
|U`u| --> The Urban Unit

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 17 sept. 2014, 01:50

Mhhh comment reprendre c'est information pour les remettres sur un autre python et les afficher lorsqu'on fait !servers <name>

say: nombre de joueur sur name: XX//XX

Juste une fonction qui permet de récupéré c'est info pour les say avec un plugin.
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
PtitBigorneau
Messages : 516
Enregistré le : 19 oct. 2008, 13:50
Localisation : brest

Re: Problème base de donnée

Message par PtitBigorneau » 17 sept. 2014, 08:34

plugin infoservers -> http://forum.bigbrotherbot.net/plugins- ... rs-plugin/

apres si tu veux faire ton propre plugin
tu recuperes les infos du plugin status dans tes fichiers status.xml
ou tu peux utiliser ca
Python Quake 3 Library -> https://github.com/gak/pyquake3
pour recuperer les infos de tes serveurs
-[TPF]-PtitBigorneau
http://www.PtitBigorneau.fr

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 17 sept. 2014, 08:46

Pour le premiers lien j'ai essayer mais le plugin je n'arrive pas à le faire fonctionné *_*

Sa me dit gametype invalid
avec les qstats: -q3s, cod , etc...

Je met qstats car c'est sur ftp sous linux... je sais pas d'ou vien le problème, si tu pourrais m'aidé pour l'installation ça serai sympa x)
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 17 sept. 2014, 08:48

Pareil j'ai commençais un autre plugin cette nuit x) (je débute alors il me faut du temps) :D

Je sais pas pourquoi à la fin du vote sa dit comme quoi que le vote est passé mais sans kick la personne :o


__version__ = '2.0'
__author__ = '=KsL=General'

import b3, time, thread, string #b3,temps,start
import b3.events # Importation des events
import b3.plugin
import b3.cron
from b3 import clients


class Vote:
Vote = 0
#-------------------------------------------------------------------------------------------------
class VotingPlugin(b3.plugin.Plugin):
requiresConfigFile = False
_kickTime = 31
lastingvote = 1
voteyes = 0
voteno = 0
percentage = 0
_clientvar_name = 'vote'


def startup(self):
"""\
Initialize plugin settings
"""
self._adminPlugin = self.console.getPlugin('admin')
if not self._adminPlugin:
self.error('Could not find admin plugin')
return False

else: #Enregistrement des commandes
self._adminPlugin.registerCommand(self, 'vote', 60, self.cmd_vote, 'v')
self._adminPlugin.registerCommand(self, 'voteyes', 0, self.cmd_voteyes, 'vy')
self._adminPlugin.registerCommand(self, 'voteno', 0, self.cmd_voteno, 'vn')
self._adminPlugin.registerCommand(self, 'resetvote', 0, self.cmd_resetvote, 'rv')


def get_Vote(self, client):
if not client.isvar(self, self._clientvar_name):
client.setvar(self, self._clientvar_name, Vote())
return client.var(self, self._clientvar_name).value

def cmd_vote(self, data, client, cmd=None):
"""\
<vote> <player/map/other> - for callvote.
"""
m = self._adminPlugin.parseUserCmd(data)
if not m[0]:
client.message('^1ERROR: ^7You must supply a vote: kick, nextmap, cyclemap...')
return False

if not m[1]:
client.message('^1ERROR: ^7You must supply a player/map/nextmap...')
return False

sclient = self._adminPlugin.findClientPrompt(m[1], client)
if sclient and m[0]=='kick':
self.lastingvote == 1
sclient.message('%s, ^3Callvote kick ^7you...' % (client.exactName))
thread.start_new_thread(self.kickvote, (sclient, client))




def kickvote(self, sclient, client):
self.voteno = 0
self.voteyes = 0
c = 0
while c < self._kickTime: #Temp kick
self.console.write('bigtext "^3Callvote kick %s ^1[^5%s^7/^530^1] ^3[^7Yes:^2%s ^7No:^1%s^7]"' % (sclient.exactName, c, self.voteyes, self.voteno))
time.sleep(1)
c += 1
if(c >= self._kickTime):
if(self.voteyes > self.voteno):
if sclient:
self.console.say('Vote ^2accepter^7: ^7Yes: ^2%s ^7No ^1%s ' % (self.voteyes, self.voteno))
self.console.write('kick %s callvote_kick' % (sclient.id)) <--------------------------------------------------------------------------- ICI
else:
self.console.say('Vote ^1refuser^7: ^7Yes: ^2%s ^7No ^1%s ' % (self.voteyes, self.voteno))




def cmd_voteyes(self, data, client, cmd=None):
"""\
Vote "voteyes" to the vote
"""
if self.lastingvote == 1:
stats = self.get_Vote(client)
if stats.Vote == 0:
self.voteyes = self.voteyes + 1
client.message('^7You voted on ^2YES ^7( ^2%s FOR ^7/ ^1%s AGAINST^3)' % (self.voteyes, self.voteno))
stats.Vote = 1
else:
client.message('^1You can vote only once')

def cmd_voteno(self, data, client, cmd=None):
"""\
Vote "voteno" to the vote
"""
if self.lastingvote == 1:
stats = self.get_Vote(client)
if stats.Vote == 0: #On active
self.voteno = self.voteno + 1
client.message('^7You voted on ^1NO ^7(^2%s FOR ^7/ ^1%s AGAINST^3)' % (self.voteno, self.voteno))
stats.Vote = 1 # on desactive
else:
client.message('^1You can vote only once')


def cmd_resetvote(self, data, client, cmd=None):
self.resetVote()

def resetVote(self): #reactiver les votes
clist = self.console.clients.getClientsByLevel(0)
if len(clist) > 0:
for c in clist:
stats = self.get_Vote(c)
stats.Vote = 0
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
PtitBigorneau
Messages : 516
Enregistré le : 19 oct. 2008, 13:50
Localisation : brest

Re: Problème base de donnée

Message par PtitBigorneau » 17 sept. 2014, 09:33

General a écrit : Je met qstats car c'est sur ftp sous linux... je sais pas d'ou vien le problème, si tu pourrais m'aidé pour l'installation ça serai sympa x)
si t as juste un acces ftp au serveur ou est hebergé ton b3 oubli le plugin infoservers
tu ne pourras pas installer qstat

essaye plutot le plugin de courgette -> http://forum.bigbrotherbot.net/plugins- ... e-servers/

pour ton vote kick, c est plutot "sclient.cid" que "sclient.id"

Code : Tout sélectionner

self.console.write('kick %s callvote_kick' % (sclient.cid))
a la place, tu peux essayer

Code : Tout sélectionner

sclient.kick("callvote_kick", None)
-[TPF]-PtitBigorneau
http://www.PtitBigorneau.fr

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 17 sept. 2014, 09:36

Rahhhh j ete kiff toi <3 tu as la solution à tout x)

Sinon je sais pas si tu t'en rapelle de moi x), bon maintenant j'ai beaucoup plus de connaissance sur urt niveau configuration serveur et pourquoi pas un peu python.

J'était ton ancien client mdeiir x) sinon merci je vais testé ça desuite
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 17 sept. 2014, 09:51

Merci pour le sclient.kick("callvote_kick", None) sa à marché :D j'ai galéré des heures pour chercher ça toi tu me sort sa comme sa x)

EDIT: Et le plugin de courgette fonctionne à merveille niquel pour moi :D
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 18 sept. 2014, 14:17

Re ptitbigorneau,

Je n'arrive pas à s'avoir pourquoi le !vote cyclemap ne fonctionne pas.
Sa serai sympa si tu pourrais m'aidé pour cette 2ème fonction comme ça après je pourrais inséré le reste facilement.

J'ai tenté depuis hier j'ai essayer avec self.votecyclemap()
sa amarché mais bon on pouvais pas faire de commande jusqu'à ce que le while ce termine.

Désolé si le code est sale mais bon je débute x)




________________________________________________________________________________________

__version__ = '2.0'
__author__ = '=KsL=General'

import b3, time, thread, string #b3,temps,start
import b3.events # Importation des events
import b3.plugin
import b3.cron
from b3 import clients


class Vote:
Vote = 0
#-------------------------------------------------------------------------------------------------
class VotingPlugin(b3.plugin.Plugin):
requiresConfigFile = False
_kickTime = 31
lastingvote = 1
voteyes = 0
voteno = 0
percentage = 0
c = 0
_clientvar_name = 'vote'


def startup(self):
"""\
Initialize plugin settings
"""
self._adminPlugin = self.console.getPlugin('admin')
if not self._adminPlugin:
self.error('Could not find admin plugin')
return False

else: #Enregistrement des commandes
self._adminPlugin.registerCommand(self, 'vote', 60, self.cmd_vote, 'v')
self._adminPlugin.registerCommand(self, 'voteyes', 0, self.cmd_voteyes, 'vy')
self._adminPlugin.registerCommand(self, 'voteno', 0, self.cmd_voteno, 'vn')
self._adminPlugin.registerCommand(self, 'resetvote', 0, self.cmd_resetvote, 'rv')



def get_Vote(self, client):
if not client.isvar(self, self._clientvar_name):
client.setvar(self, self._clientvar_name, Vote())
return client.var(self, self._clientvar_name).value

def cmd_vote(self, data, client, cmd=None):
"""\
<vote> <player/map/other> - for callvote.
"""
m = self._adminPlugin.parseUserCmd(data)
sclient = self._adminPlugin.findClientPrompt(m[1], client)


if m[0]=='cyclemap':
self.lastingvote == 1
self.console.say('^3Callvote cyclemap ^7by %s' % (client.exactName))
thread.start_new_thread(self.votecyclemap, (client)) <<<<------------------------------------------------------------- ICI



elif sclient and m[0]=='kick':
self.lastingvote == 1
sclient.message('%s, ^3Callvote kick ^7you...' % (client.exactName))
thread.start_new_thread(self.multipunish, (sclient, client))





def votecyclemap(self, client): <<<<<<-------------------------------------------- ICI
self.voteno = 0
self.voteyes = 0
d = 0
while d < self._kickTime: #Temp kick
self.console.write('bigtext "^3Callvote cyclemap ^1[^5%s^7/^530^1] ^3[^7Yes:^2%s ^7No:^1%s^7]"' % (d, self.voteyes, self.voteno))
time.sleep(1)
d += 1
if(d >= self._kickTime):
if(self.voteyes > self.voteno):
self.console.say('Vote ^2accepter^7: ^7Yes: ^2%s ^7No ^1%s ' % (self.voteyes, self.voteno))
self.console.write('cyclemap')
else:
self.console.say('^3Callvote cyclemap ^1refuser^7: ^7Yes: ^2%s ^7No ^1%s ' % (self.voteyes, self.voteno))

def multipunish(self, sclient, client):
self.voteno = 0
self.voteyes = 0
c = 0
while c < self._kickTime: #Temp kick
self.console.write('bigtext "^3Callvote kick %s ^1[^5%s^7/^530^1] ^3[^7Yes:^2%s ^7No:^1%s^7]"' % (sclient.exactName, c, self.voteyes, self.voteno))
time.sleep(1)
c += 1
if(c >= self._kickTime):
if(self.voteyes > self.voteno):
if sclient:
self.console.say('Vote ^2accepter^7: ^7Yes: ^2%s ^7No ^1%s ' % (self.voteyes, self.voteno))
sclient.kick("callvote_kick", None)
else:
self.console.say('Vote ^1refuser^7: ^7Yes: ^2%s ^7No ^1%s ' % (self.voteyes, self.voteno))







def cmd_voteyes(self, data, client, cmd=None):
"""\
Vote "voteyes" to the vote
"""
if self.lastingvote == 1:
stats = self.get_Vote(client)
if stats.Vote == 0:
self.voteyes = self.voteyes + 1
client.message('^7You voted on ^2YES ^7( ^2%s FOR ^7/ ^1%s AGAINST^3)' % (self.voteyes, self.voteno))
stats.Vote = 1
else:
client.message('^1You can vote only once')

def cmd_voteno(self, data, client, cmd=None):
"""\
Vote "voteno" to the vote
"""
if self.lastingvote == 1:
stats = self.get_Vote(client)
if stats.Vote == 0: #On active
self.voteno = self.voteno + 1
client.message('^7You voted on ^1NO ^7(^2%s FOR ^7/ ^1%s AGAINST^3)' % (self.voteno, self.voteno))
stats.Vote = 1 # on desactive
else:
client.message('^1You can vote only once')


def cmd_resetvote(self, data, client, cmd=None):
self.resetVote()
self.c = 30

def resetVote(self): #reactiver les votes
clist = self.console.clients.getClientsByLevel(0)
if len(clist) > 0:
for c in clist:
stats = self.get_Vote(c)
stats.Vote = 0
self.YES = 0
self.NO = 0
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
PtitBigorneau
Messages : 516
Enregistré le : 19 oct. 2008, 13:50
Localisation : brest

Re: Problème base de donnée

Message par PtitBigorneau » 19 sept. 2014, 10:41

il te dit quoi ton b3.log ?
-[TPF]-PtitBigorneau
http://www.PtitBigorneau.fr

Avatar du membre
General
Messages : 307
Enregistré le : 14 nov. 2013, 14:57
Localisation : France

Re: Problème base de donnée

Message par General » 20 sept. 2014, 04:33

Dans les logs quand je fait !vote cyclemap:


140920 04:30:55 VERBOSE 'Queueing event Say !v cyclemap'
140920 04:30:55 VERBOSE 'Parsing Event: Say: AdminPlugin'
140920 04:30:55 DEBUG 'AdminPlugin: OnSay handle 5:"!v cyclemap"'
140920 04:30:55 DEBUG 'AdminPlugin: Handle command !v cyclemap'
140920 04:30:55 VERBOSE "RCON sending (37.59.50.59:36400) 'tell 1 ^7 ^3[pm]^7 ^7There was an error processing your command'"
140920 04:30:55 ERROR "handler AdminPlugin could not handle event Say: AttributeError: 'NoneType' object has no attribute 'strip' [('/home/servurt/b3ctf/b3/parser.py', 1055, 'handleEvents', 'hfunc.parseEvent(event)'), ('/home/servurt/b3ctf/b3/plugin.py', 158, 'parseEvent', 'self.onEvent(event)'), ('/home/servurt/b3ctf/b3/plugin.py', 176, 'onEvent', 'self.handle(event)'), ('/home/servurt/b3ctf/b3/plugins/admin.py', 296, 'handle', 'self.OnSay(event)'), ('/home/servurt/b3ctf/b3/plugins/admin.py', 441, 'OnSay', 'results = command.execute(data, event.client)'), ('/home/servurt/b3ctf/b3/plugins/admin.py', 2227, 'execute', 'self.func(data, client, copy.copy(self))'), ('/home/servurt/b3ctf/b3/extplugins/voting.py', 52, 'cmd_vote', 'sclient = self._adminPlugin.findClientPrompt(m[1], client)'), ('/home/servurt/b3ctf/b3/plugins/admin.py', 479, 'findClientPrompt', 'matches = self.console.clients.getByMagic(client_id)'), ('/home/servurt/b3ctf/b3/clients.py', 1033, 'getByMagic', 'id = id.strip()')]"
Website : http://ksl-clan.com/ teamspeak3: ksl-clan.com

Avatar du membre
PtitBigorneau
Messages : 516
Enregistré le : 19 oct. 2008, 13:50
Localisation : brest

Re: Problème base de donnée

Message par PtitBigorneau » 20 sept. 2014, 09:29

oki

c est parce que t as cette ligne

Code : Tout sélectionner

sclient = self._adminPlugin.findClientPrompt(m[1], client)
au mauvais endroit,

Code : Tout sélectionner

m = self._adminPlugin.parseUserCmd(data)

if m[0]=='cyclemap':
self.lastingvote == 1
self.console.say('^3Callvote cyclemap ^7by %s' % (client.exactName))
thread.start_new_thread(self.votecyclemap, (client)) <<<<------------------------------------------------------------- ICI

elif m[0]=='kick':
sclient = self._adminPlugin.findClientPrompt(m[1], client)
if sclient:
self.lastingvote == 1
sclient.message('%s, ^3Callvote kick ^7you...' % (client.exactName))
thread.start_new_thread(self.multipunish, (sclient, client))
-[TPF]-PtitBigorneau
http://www.PtitBigorneau.fr

Répondre