logo Homepage
+  NewbieContest
Username:
Password:
  Voir les messages
Pages: 1 ... 3 4 [5]
61  Programmation / Autres langages / Re : Transfert de fichiers via IRC en python3 : Probleme DCC SEND le: 29 Avril 2018 à 00:28:36
Merci pour toutes vos reponses qui m'ont permis d'y voir plus clair et apportent bien plus encore. Ca m'a permi d'aller voir des choses que je m'attendais pas et ca c'est cool! 

Sinon pour DCC je met de cote pour l'instant, ca m'a l'air trop complique pour le niveau ou j'en suis. Par contre je vois bien la direction a suivre, ce n'est que partie remise. J'ai quand meme la possibilite d'envoyer des fichiers par une fonction mail(), mais je me sens un peu limite quant a la taille des pieces jointes... Enfin bref, ca se fera petit a petit et ca sera bien quand meme!

Encore merci pour votre temps!
 
Je met un Resolu, je crois bien que toutes les explications ont ete donnes.
62  Programmation / Autres langages / Re : Transfert de fichiers via IRC en python3 : Probleme DCC SEND le: 27 Avril 2018 à 01:47:20
Code:
Attention ! Le serveur irc ne connait pas la commande dcc, ça ne sert donc à rien de lui envoyer.
Alors c'est pour ca, que quand moi je la tape dans mon client, ca marche, et que mon Bot ne sait pas gerer ca car c'est lui le client et donc a lui de faire le boulot.

Ok il me semblait bien aussi que ca allait etre un truc comme ca. J'esperais encore que ca allait etre facile mais c'est la vie!

Du coup si je veux l'implementer il faut que je redefinisse une nouvelle connexion.
Je crois que cette fois j'ai bien saisi le probleme. Autrement dit, je ne suis pas sorti de l'auberge...
Je vais voir ce que je peux faire maintenant.

Merci pour les infos, ca me debloque vraiment!
63  Programmation / Autres langages / Re : Transfert de fichiers via IRC en python3 : Probleme DCC SEND le: 26 Avril 2018 à 15:29:47
Ah, je ne savais pas.
Etant autodidacte il y a pas mal de choses qui peuvent m'echaper.
Je m'etais arreter a l'utilisation "\n" --> linux, "\r" --> mac et "\r\n" --> windows.

Du coup j'ai teste avec et sans le "\r", les messages sont bien postes.
Par contre sans rien du tout (ni "r" ni "n") bon ba la ca marche plus du tout.

Du coup ca m'a fait voir que je l'avais oublie dans ma fonction sendfile(), mais ce n'est pas ca qui pose probleme apparement. 

Lors de l'appelle de ma fonction je fais un "print("n'importe quoi")" qui ne s'affiche pas, comme si le programme avait saute la suite car il continue de recevoir et analyser les messages que je lui envoie...

Code:
if name == "neib" and message == "sendfile" :
sendfile()
print("c'est bon")
64  Programmation / Autres langages / Re : Transfert de fichiers via IRC en python3 le: 26 Avril 2018 à 11:44:29
Salut Stockage.
Citation
Juste un détail mais qui a son importance : C'est "\r\n" et pas "\n\r"
En fait travaillant sur linux "\n" suffit. Mais je pensais au cote portage multi-plateforme. Enfin bref, du coup j'ai vire tous les "\r". Merci pour l'info!

Pour l'histoire de "DCC SEND".
J'ai essaye de simplifier mon code au maximum afin de ne garder que l'envoi de fichier, mais sans succes...

Code:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import socket
import os
import time

# Declaration des fonctions.
def pong():
  ircsock.send(bytes("PONG :pingis\n", "UTF-8"))

def sendfile():
ircsock.send(bytes("DCC SEND neib DCC.py" , "UTF-8"))

def rcvmsg():
ircmsg = ircsock.recv(2048).decode("UTF-8")
ircmsg = ircmsg.strip('\n')

if ircmsg.find ("PING :") != -1 :
pong()

elif ircmsg.find("PRIVMSG") != -1 :
name = ircmsg.split('!',1)[0][1:]
message = ircmsg.split('PRIVMSG',1)[1].split(':',1)[1]

if name == "neib" and message == "sendfile" :
sendfile()




# Parametrage de la connection.
# On determine le reseau sur lequel on va se connecter.
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = "chat.freenode.net" # Server
chan = "#TestDCCSEND" # Channel
botnick = "testdcc" # Nick

#
#
#
# Connection au reseau.
ircsock.connect((server, 6667)) # 6697 pour utiliser ssl ou sinon 6667.
ircsock.send(bytes("USER "+ botnick +" "+ botnick +" "+ botnick + " " + botnick + "\n", "UTF-8")) # Identification du bot.
ircsock.send(bytes("NICK "+ botnick +"\n", "UTF-8")) # Assigne le nick du bot

#
# Rejoindre un cannal.
ircsock.send(bytes("JOIN "+ chan +"\n", "UTF-8"))
ircmsg = ""
#ircsock.send(bytes("HELP\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG "+ chan+ " :plop!\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG neib :Ok.\n", "UTF-8"))

while 1 :
rcvmsg()

Etant donne que  DCC est un protocole utilise par IRC, ne faudrait-il pas creer une nouvelle connection entre le bot et l'admin sur un port specifique?

EDIT : De meme que :
Code:
def rcvfile():
ircsock.send(bytes("DCC GET neib", "UTF-8"))
ne semble pas fonctionner non plus. Il faudrait que j'arrive a trouver un message d'erreur...

Merci!
65  Programmation / Autres langages / Re : Transfert de fichiers via IRC en python3 le: 24 Avril 2018 à 21:56:25
Merci pour ces precisions, je vais etudier un peu ca.
Mais du coup dans :
 
Code:
def rcvmsg():
ircmsg = ircsock.recv(2048).decode("UTF-8")
ircmsg = ircmsg.strip('\n\r')

il faut bien que je lui indique la taille comme argument.
Pour moi la fonction se termine normalment a chaque message recu et 2048 est la taille maximum pour chaque message la communication.
Ce qui fait que globalment pas de probleme.

Citation
ircmsg.find ? si en tant qu'utilisateur de ton bot, j'écris des trucs sur IRC, du genre "PING PRIVMSG QUERY NICK". Il se passe quoi à ton avis ?  Tu devrais couper ta chaîne dès que tu la reçois, et une fois qu'elle est correctement splitée, vérifier que la commande correspond bien dans ton if.
En fait je trouve ca bien galere le traitement des messages recus. Ca marche a peu pres comme ca, je n'ai pas encore constate de problemes.
Mais du coup je vais le rajouter sur ma liste de modifications.

Sinon :
Citation
"/bin/sh: 1: DCC: not found
/bin/sh: 1: Syntax error: "(" unexpected"
ce message d'erreur a ete obtenu je pense grace a "print(message)" et en reponse a la commande manuelle dans mon client irc : "/dcc send monbot fichier" (ou en graphique via l'option adequat).
Peut etre est-ce du a une autre fonction ouverte en attente d'une commande et qui renvoie ce message d'erreur, mais tout le reste du programme semble fonctionner comme il faut.

Mais mon gros probleme est surtout le
Code:
def send(fichier) :
ircsock.send(bytes("DCC SEND "+ adminname + " " + fichier +"\n", "UTF-8"))
qui ne fonctionne pas.

Merci pour le coup d'oeil!

EDIT :  En fait j'ai compris pour l'histoire du "/bin/sh dcc not found". C'est du a mon "else :" de la fin qui accepte beaucoup trop de choses. Je vais y remedier.
Sinon pour mon "send()", si adminname a ete declare en dehors de la fonction, le connait-il a l'interieur? En meme temps oui, sinon j'aurais une erreur du genre "adminname not declared". J'ai plus trop d'idees... Bon, je vais continuer mes recherches.
66  Programmation / Autres langages / Re : Transfert de fichiers via IRC en python3 le: 24 Avril 2018 à 19:52:34
Salut!
Merci pour les explications.

Alors en fait, ce bout de code ne correspond pas a mon programme, j'ai essayer de virer un peu ce qui nous interresse pas.
Du coup :
Citation
message[0] correspond à l'index 0 de la variable messge, soit le caractère "s". Ainsi, ça équivaut à "s" == "send", ce qui est par définition faux.

Tu ne valides donc jamais la condition et n'appelles pas la fonction send.

j'ai transforme messge en list grace a
Code:
messge = message.split()

Effectivement, je vais le rajouter dans mon post No1.
Toutes mes commandes sont passees sur ce principe.

Citation
Au passage, même en fixant ce souci, tu essaie désespérément d’utiliser la variable messge... qui n'existe pas, vu qu'il manque un "a"
Pas de soucis la decu, c'est bien ca j'ai deja pas mal de msg message etc...

Citation
Tu ne boucles pas, donc de base, ça ne devrait pas pouvoir fonctionner très longtemps (juste le temps des 2048 octets à recevoir, ou d'une coupure de la socket). Un coup de while True devrait aider à ce que ton bot survive
Je boucle grace a
Code:
joinchan(channel)
while rcvmsg() != exitcode :
rcvmsg()
Pardon, peut etre que j'ai voulu trop en virer dans mon premier message, je vais editer.
Par contre l'histoire des 2048 octets c'est quelque chose que je ne maitrise pas vraiment.
En plus au debut du code j'ai un
Code:
BUFFER_SIZE = 1024
Je veux bien quelques explications si ca ne te gene pas?

Du coup, pour en revenir a mon send(), lors de la declaration de ma fonction, est-ce que ca parait correct?
Est ce que DCC utilise un autre port qui pourrait etre filtre par ma box?

En tapant la commande manuellement dans HexChat :
Code:
/dcc send neib fichier
pas de probleme pour l'auto-envoie.

Par contre pour mon bot :
Code:
/dcc send BOT fichier
j'obtient le message suivant dans mon retour du programme :
Citation
/bin/sh: 1: DCC: not found
/bin/sh: 1: Syntax error: "(" unexpected
Je sais que je n'ai encore rien prevu pour la reception mais je trouve ce message un peu bizzard.

Ok, je vais editer mon premier message pour y comprendre un peu mieux.

Merci.
67  Programmation / Autres langages / (Resolu) Transfert de fichiers via IRC en python3 : Probleme DCC SEND le: 24 Avril 2018 à 18:12:03
Bonjour,

Je ne sais pas si y'en a qui sont chaud de la programmation, enfin voila, je coince lors de la creation d'un bot en python.
La communication se fait nickel, la plupart des fonctions sont operationnelles, seulement, lorsque je souhaite envoyer un fichier rien ne se passe... Aucune reponse, mais le programme continue de fonctionner normalement.

Je vais essayer de resumer un peu mon code en gardant ce qui me semble utile ici :

Code:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import socket

# On determine le reseau sur lequel on va se connecter.
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = "chat.freenode.net" # Server
BUFFER_SIZE = 1024

# Preparation
channel = "#test" # Channel
botnick = "test" # Nick
adminname = "admin"

# Connection au reseau.
ircsock.connect((server, 6667)) # 6697 pour utiliser ssl ou sinon 6667.
ircsock.send(bytes("USER "+ botnick +" "+ botnick +" "+ botnick + " " + botnick + "\n", "UTF-8")) # Identification du bot.
ircsock.send(bytes("NICK "+ botnick +"\n", "UTF-8")) # Assigne le nick du bot

# Rejoindre le cannal.
def joinchan(chan):
ircsock.send(bytes("JOIN "+ chan +"\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG "+ chan+ " :plop!\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG "+ adminname + " :En attente.\n", "UTF-8"))

# Envoyer un message.
def sendmsg(msge, target=channel): # sends messages to the target.
ircsock.send(bytes("PRIVMSG "+ target +" :"+ msge +"\n", "UTF-8"))
# Ici tout marche bien.

# Envoyer un fichier.
def send(fichier) :
ircsock.send(bytes("DCC SEND "+ adminname + " " + fichier +"\n", "UTF-8"))

joinchan(channel)


def rcvmsg() :
        ircmsg = ircsock.recv(2048).decode("UTF-8")
        ircmsg = ircmsg.strip('\n\r')

# Ne pas oublier le fameux ping pong...
        if ircmsg.find ("PING :") != -1:
       ping()    # Bon, la, je met pas la fonction pour repondre au ping, elle existe bien

#  Recuperer le message ainsi que son expediteur.
        elif ircmsg.find("PRIVMSG") != -1:
       name = ircmsg.split('!',1)[0][1:]
       message = ircmsg.split('PRIVMSG',1)[1].split(':',1)[1]
       print(message)


                messge = message.split()  # Et voila! Effectivement c'etait important!

       if name == adminname and messge[0] == "send" :
       if len(messge) > 1 :
        send(messge[1])
# C'est ici que ca ne va pas... j'ai aussi essaye :

#        ircsock.send(bytes("DCC SEND "+ adminname + " :fichier\n", "UTF-8"))
#        ircsock.send(bytes("SEND "+ adminname + " :" + messge[1] + "\n", "UTF-8"))
#        ircsock.send(bytes("PRIVMSG "+ adminname +" :/dcc send "+ adminname + " " + messge[1] +"\n", "UTF-8"))
#         ircsock.send(bytes("DCC SEND "+ adminname + " :" + messge[1] +"\n", "UTF-8"))
#        ircsock.send(bytes("DCC SEND "+ adminname + " " + messge[1] +"\n", "UTF-8"))


joinchan(channel)
while rcvmsg() != exitcode :
rcvmsg()

# Voila, comme ca ca doit etre un peu mieux pour comprendre.

Voila, la fonction send() ne sert a rien...

J'ai vu aussi que irclib permettait d'utiliser dcc, mais pas evident de trouver de la doc, la plupart renvoie a des tutos pour pour le telechargement sur des servers xdcc...(pas bien! ) Enfin bref.

Est ce que quelqu'un a deja fait?
Ou alors peut etre que j'ai fait une erreur evidente, mais pour l'instant je ne trouve pas.

Merci d'avance!

EDIT : sur le meme principe, j'ai egalement cree une fonction mail() qui permet d'envoyer un fichier via smtp.
L'ajout de '/dcc send' ici est pour racourcir un peu les manips (ouvrir boite mail, puis dl piece jointe)
La comprehension de dcc permettra aussi la possibilite inverse : qui dit envoie dit aussi recoit.
En gros je pourrais m'en passer mais j'aimerais bien l'avoir quand meme.

EDIT2: Voila, j'ai un peu clarifie mon code, j'espere que ca va mieux, desole.
68  Challenges / Aide Wargame / Re : Wargame - Spéciale Stockage le: 25 Septembre 2017 à 23:42:53
/* A mettre dans l'after ! */
69  Challenges / Aide Wargame / Re : Wargame - Spéciale Stockage le: 25 Septembre 2017 à 18:46:35
Bonjour,

Alors voila, je me suis lance dans les wargames, celui-ci ayant l'air a ma portee.
J'arrive /* Modération : Ça en dit un peu beaucoup trop ! */

(Je suis desole, je ne sais pas trop ce qu'on a le droit de dire ou pas... En meme temps, peu nombreux ceux qui ont reussi a valider cette epreuve.)

Merci pour les challenges!
Pages: 1 ... 3 4 [5]