Affichage des articles dont le libellé est Scripts. Afficher tous les articles
Affichage des articles dont le libellé est Scripts. Afficher tous les articles

Mass_op avec mIRC

Ce tuto a pour but d'expliquer comment créer des mass-commandes de facon très simple avec mIRC donc nous allons faire une commande mass_op qui effectuera le mode +o sur tous les users du salon concerné.

D'abord, il nous faut créer un alias (qui peut etre comparé à une procedure) et grâce a cet alias nous pourrons effectuer la commande /mass_op #nom_du_salon afin d'oper tout le monde.

Donc un alias se déclare de deux facons selon où l'on le place. Dans mIRC, on dispose d'un coin 'remote' et d'un coin 'alias'. Dans le coin 'alias' on ne peut ecrire que des alias tandis que dans le coin remote on peut mettre alias, evenements (ce qui sert a effectuer des actions selon un evenement tel que join,part,ctcp,etc...) a la seule différence que dans la partie remote on doit ajouter 'alias' devant le nom de l'alias (ce qui n'est pas le cas dans la partie alias)

Nous allons créer un alias que nous placerons dans nos remotes. Pour ceux qui ne savent pas où sont les remotes : ALT + R ou cliquez sur l'icône avec le "/a" puis cliquez sur l'onglet "remote".

alias mass_op { }

Voilà, nous pouvons y ajouter les commandes que nous voulons dans notre alias. Je vais tout de suite vous montrer l'alias avec des commentaires (les lignes commencant par des ";" sont des commentaires)

alias mass_op {
; Ici on déclare une variable locale %i qui nous servira à compter
; à chaque tour de boucle : c'est ce qu'on appelle un compteur de boucle.
; ici on l'initialise à 1 parce qu'on op le 1er pseudo pas le 0eme pseudo.
var %i = 1
; Ensuite on vérifie si l'on est bien op sur le salon .. car si on est pas op
; On ne peut biensûr pas oper les autres.
; $me représente votre pseudo "isop" est un opérateur qui vérifie si $me est op sur $1
; Et donc vous l'avez compris $$1 est le salon sur lequel on effectue l'action
; En fait $1 est le paramètre passé à l'alias
; Par exemple si l'on tape /mass_op kikoo $1 représente kikoo
; De plus on rajoute un $ devant $1 pour etre sûr que le parametre a bien été écrit.
if $me isop $1 {
; La boucle signifie qu'on effectue une opération (ici c'est mettre le mode +o)
; jusqu'à ce que %i ait dépasse la valeur de $nick($1,0)
; Alors $nick($1,0) représente le nombre de personne sur le salon $1
; Vous pouvez essayer de taper ceci sur n'importe quel salon :
; //echo -a Nombre de personne sur $chan : $nick($chan,0)
; //echo -a Pseudo numéro 5 sur $chan : $nick($chan,5)
while %i <= $nick($1,0) {
; Ici c'est une commande basique on effectue le mode +o sur le salon $1
; Au pseudo numéro %i (donc numéro1, numéro 2 ..., numéro $nick($1,0))
mode $1 +o $nick($1,%i)
; On incrémente la variable %i, c'est-à-dire on lui ajoute 1 à chaque tour de boucle
; Afin d'avoir le pseudo numéro 1,2,3...
inc %i
}
}
; Ici si l'on était pas op sur $1 on renvoit un message d'erreur
else {
echo -a Erreur Vous n'etes pas op sur le salon
}
}
Bon bien sûr maintenant à vous de l'adapter à vos besoin.
Par exemple, on peut rajouter des conditions du style : oper juste ceux qui ne sont pas op.
on remplace cette ligne :
mode $1 +o $nick($1,%i)
par celle-ci :
mode $1 +o $nick($1,a,o,%i)
On peut faire ca avec un autre mode aussi tel que +v ou +h ...
Ou même une toute autre commande tant qu'elle fait appelle à tous les pseudos d'un salon.
Un autre exemple :
msg $nick($1,%i) Bonjour.
ce qui aura pour effet d'envoyer un message en pv à tous les gens du salon $1

Gestion des Hilights Xchat python

Voici un script pas encore tout a fait au point, mais fonctionnel malgre tout, qui permet d'afficher les Hilights dans une fenetre a part et/ou sur le salon courant. Pour charger ce script au demarrage de xchat, il faut le mettre dans le meme repertoire que le fichier xchat.conf ( sous linux dans ~/.xchat2/ )

Le bug des HL en message privé est corrigé
__module_name__ = "HiLights" 

__module_version__ = "1.1" 
__module_description__ = "Script de gestion de HL"
import xchat
import string

NOHL = ["Pegasus","Nemesis","Thetys"]
HLS = ["TroLL","Own3d","own3d"]

FENSUP = "oui"
CURCHAN = "oui"
def messages_cb(word, word_eol, userdata):

      CURRPSEUDO = xchat.get_info("nick")
      CRCH = xchat.find_context(channel=None)

      LE_MSG = word_eol[3]
      LEPSEUD = word[0]

      LEPSEUD = string.replace(LEPSEUD,':','')
      LEPSEUD = string.split(LEPSEUD,'!')

      LE_PSEUDO = LEPSEUD[0]
      LE_HOST = LEPSEUD[1]

      for NHL in NOHL:
           if LE_PSEUDO.count(NHL):

                return xchat.EAT_NONE
      for HL in HLS:
           if (LE_MSG.count(HL)) or (LE_MSG.count(CURRPSEUDO)):

                try:
                     CCRCH = CRCH.get_info("channel")
                     testa = xchat.find_context(channel=word[2])

                     testb = testa.get_info("channel")
                     if (CURCHAN == "oui") and (CCRCH != testb):

                          CRCH.prnt("\x0321\x02HIGHLIGHT\t%s  (%s) \x03\x02%s\n\x0318\x02%s " % (LE_PSEUDO, LE_HOST, word[2], word_eol[3]))

                except AttributeError:
                     CCRCH = CRCH.get_info("channel")

                     prout = word[0].split("!")
                     prout = string.replace(prout[0],':','')

                     testa = xchat.find_context(channel=prout)
                     testb = testa.get_info("channel")

                     if (CURCHAN == "oui") and (CCRCH != testb):

                          CRCH.prnt("\x0321\x02HIGHLIGHT\t%s  (%s) \x03Message Prive\n\x0318\x02%s " % (LE_PSEUDO, LE_HOST, word_eol[3]))

           if (LE_MSG.count(HL)) or (LE_MSG.count(CURRPSEUDO)):

                if FENSUP == "oui":
                     LAFEN = xchat.find_context(channel="HiLight")

                     if LAFEN == None:
                          xchat.command("query -nofocus HiLight")

                          LAFEN = xchat.find_context(channel="HiLight")
                          LAFEN.prnt("\x0321\x02%s\t%s (%s) \x03\x02%s" % (word[2],LE_PSEUDO, LE_HOST, word_eol[3]))

                          return xchat.EAT_NONE
                     else:
                          LAFEN.prnt("\x0321\x02%s\t%s (%s) \x03\x02%s" % (word[2],LE_PSEUDO, LE_HOST, word_eol[3]))

                          return xchat.EAT_NONE
      return xchat.EAT_NONE
xchat.hook_server("PRIVMSG", messages_cb) 

print "%s %s loaded" % (__module_name__, __module_version__)

Anti-Sapart_Sajoin_MassSajoin

Parfois sur irc, des operateurs facetieux s'amusent a vous sapart (forcer a quitter un salon), vous sajoin (forcer a joindre un salon), ou pire, vous contraignent a joindre un grand nombre de salons, ce qui a pour effet de vous faire lagguer et vous force a vous deconnecter.

Ce petit script vous permettra de quitter automatiquement le ou les salons d'ou vous serez sajoin, et de rejoindre automatiquement les salons d'ou vous serez sapart, et ce, en evitant le lag.


Le script ne fonctionnait pas, l'erreur est maintenant corrigée.




import xchat

__module_name__ = "Anti_Sapart-SaJoin-MassSajoin" 
__module_version__ = "0.1.2" 
__module_description__ = "Rejoin automatique sur un sapart et Part auto sur un sajoin"

def as_cb(word, word_eol, userdata):
    leserveur = xchat.get_info('server')

    try:
        if word[9] is not None:
            if word[9][0] is chr(35) and word[8] == "part" and word[0] == ":"+leserveur:

                print "sapart du salon", word[9]
                xchat.command("join %s" % (word[9]))
            if word[9][0] is chr(35) and word[8] == "join" and word[0] == ":"+leserveur:
                xchat.command("flushq")
                xchat.command("part %s les SAJOIN cay pas poli" % (word[9]))
        return xchat.EAT_NONE
    except IndexError:
        return xchat.EAT_NONE


xchat.hook_server("Notice", as_cb) 
print "%s %s loaded" % (__module_name__, __module_version__)


Quelques explications :

Le script recupere les notices, verifie qu'une notice envoyée par le serveur (leserveur get_info) correspond bien au format :

* *** You were forced to part #salon
* *** You were forced to join #salon

En cas de sapart, il fait un join sur le salon, et en cas de sajoin, un flushq et un part.

Pourquoi le flushq ? en cas de mass-sajoin (sajoin d'un grand nombre de salons en meme temps), votre client envoit beaucoup de données au serveur, ce qui provoque le lag. Le flushq sert donc a vider la queue d'envoi afin de ne pas avoir a attendre que tous les messages soient envoyés.

Le try / except sert a gerer l'exception "indexrange" sur les notices qui n'ont pas un assez grand nombre de caracteres... Si cette exception n'etait pas gérée, sur une notice d'une personne quelconque avec pour texte un simple "salut" par exemple, le script renverrait une erreur dans xchat de type :

Traceback (most recent call last):
File "/chemin/du/script/AntiSapart.py", line 12, in as_cb
if word[9] is not None:
IndexError: list index out of range

(remarquez que le type d'erreur est specifié dans l'erreur renvoyée, ce qui permet de savoir quel except gerer).

Programmer en python pour xchat - 1

Creer des commandes simples en python pour Xchat



Avec le plugin python pour xchat, il est tres simple de creer des commandes personnelles. Nous allons voir comment creer soi-meme un petit script qui vous permettra de comprendre comment creer celles de votre choix.

Pour commencer, nous allons faire un squelette de script python pour xchat.


#-------------------------------------------------------------------
__module_name__ = "Nom de notre script" 
__module_version__ = "Numero de version de notre script" 
__module_description__ = "Description de notre script"
__module_author__ = "Auteur de notre script"
#-------------------------------------------------------------------
import xchat
#-------------------------------------------------------------------
def fonction_cb(word, word_eol, userdata):


#-------------------------------------------------------------------
print "%s %s loaded" % (__module_name__, __module_version__)



Voyons voir chaque partie de notre script pour comprendre a quoi elle sert.

La premiere partie decrit le script que l'on cree.
Le "import xchat", qui charge le module xchat est indispensable pour que python charge l'api xchat
La derniere partie (le print), sert a afficher dans xchat que le script a bien ete chargé. Dans le cas present, ca vous affichera :

"Nom de notre script Numero de version de notre script loaded"

Reste la partie interressante, le script a proprement parler. Avec la ligne def fonction_cb(word, word_eol, userdata):, nous definissons une fonction qui s'appelle "fonction_cb". Pour appeller cette fonction, nous utilisont les fonctions HOOK de l'api xchat.

Dans le cas present, nous allons regarder la fonction xchat.hook.command qui va nous permettre d'ajouter des nouvelles commandes.
Imaginons que nous souhaitons creer une commande qui va "flooder" une personne en notices...
Pour cette commande, il faudra plusieurs arguments :

    Le nombre de messages a envoyer
    Le pseudo de la victime
    Le message a envoyer


Nous appellerons cette commande "flood". Nous ajoutons donc a notre squelette la ligne suivante :

xchat.hook_command("FLOOD", fonction_cb, help="/flood <nombre> <pseudo> <message>\nEnvoit <nombre> de <message> en NOTICE a <pseudo>")

Cette ligne aura pour effet que, lorsque la commande /flood sera tapée dans xchat, elle executera la fonction "fonction_cb". Et lorsque vous taperez "/help flood", le texte contenu dans help="" sera affiché a l'ecran comme l'aide normale des commandes. Dans le texte d'aide, les caracteres \n servent a passer a la ligne. Nous placeront cette ligne a la fin du script, juste au dessus de "print".

Nous avons maintenant un script qui reconnais la commande flood et execute une fonction lorsqu'elle est appellee. Cette fonction necessitant plusieurs parametres, nous allons donc verifier sommairement l'existence d'au moins 3 parametres dans la commande.
    if len(word) < 3:
            print "Cette fonction necessite au moins 3 parametres, tapez /help flood pour obtenir une aide."
    else:


Comme il est expliqué dans la documentation python pour xchat, "word" contient les parametres que l'utilisateur a entré lors de la commande. "LEN(word)" determine le nombre de parametres dans la commande.

Comme c'est explique, word[0] correspond au nom de la commande, dans le cas present, "FLOOD"
word[1] doit etre le nombre de messages a envoyer
word[2] doit etre le pseudo de la cible
word_eol[3] est le message a envoyer (On utilise word_eol qui signifie : du mot word[3] jusqu'a la fin de la ligne)

Dans le cas present cette verification est quasiment inutile puisqu'on demande de taper un message a envoyer, le texte lui meme fera surement plus de 3 mots et cette verification n'aura que peu d'interet. Il aurait ete plus indiqué de creer une fonction pour verifier que le word[1] est bien un chiffre et que le word[2] est un pseudo existant, mais ne compliquons pas les choses pour l'instant (d'autant que j'ai la flemme de decrire tout ca). Vous devrez donc faire en sorte de ne pas vous tromper dans les parametres a transmettre lors de l'appel de la commande pour eviter d'avoir un message d'erreur.

Reste maintenant a envoyer la commandes en elle-meme. Nous allons donc creer un timer pour eviter de lagguer en envoyant les commandes. Considerons que le rythme maximum de commandes possibles a envoyer au serveur est de 2 secondes par commande.

    xchat.command("timer -refnum 1 -repeat %s 2 notice %s %s" % (word[1] , word [2] , word_eol[3]))


La fonction xchat.command() :

Entre les parentheses on retrouve la commande a executer comme elle le sera dans xchat, sans le / avant.
Les %s sont les termes qui seront remplacés dans la commande par les valeures des variables que l'on trouve apres le %, entre parentheses. Ces %s sont mis dans l'ordre ou ils apparaissent.
Donc si on tape la commande "/flood 10 marcel flood qui pue dans ta face" dans xchat, word[1] vaudra "10", word[2] vaudra "marcel" et word_eol[3] vaudra "flood qui pue dans ta face". Ce qui donnera comme commande envoyée a xchat :

/timer -refnum 1 -repeat 10 2 notice marcel flood qui pue dans ta face

Il ne nous reste plus qu'a signaler que notre fonction est terminee avec la commande return.

L'option EAT_* va nous permettre de decider si xchat ou d'autres plugins/scripts peuvent voir les notices envoyées par celui ci ainsi que la commande utilisée

Si on ne veut pas qu'un autre plugin voit la commande, on choisit EAT_PLUGIN
Si on ne veut pas que xchat voit l'evenement (inutile dans le cas present, mais pourrait servir pour un hook_print), on utilise EAT_XCHAT
Si on ne veut pas que ni xchat, ni d'autres plugins voient l'evenement, on utilise EAT_ALL
Si on veut que xchat et les autres plugins puissent voir l'evenement, on utilise EAT_NONE

Dans le cas present, on va considerer qu'on ne veut pas qu'un autre plugin voit la commande, on utilisera donc EAT_ALL :

    return xchat.EAT_ALL



Et voila, notre script est fini, et xchat dispose d'une nouvelle commande : flood. n'oublions pas que le python demande de respecter l'indentation des programmes, le code final sera donc le suivant :


__module_name__ = "Nom de notre script" 
__module_version__ = "1.0" 
__module_description__ = "Description de notre script"
__module_author__ = "Auteur de notre script"

import xchat

def fonction_cb(word, word_eol, userdata):

 if len(word) < 3:
  print "Cette fonction necessite au moins 3 parametres, tapez /help flood pour obtenir une aide."
 else:
  xchat.command("timer -refnum 1 -repeat %s 2 notice %s %s" % (word[1] , word [2] , word_eol[3]))
 return xchat.EAT_ALL


xchat.hook_command("FLOOD", fonction_cb, help="/flood <nombre> <pseudo> <message>\nEnvoie <nombre> de <message> en NOTICE a <pseudo>")
print "%s %s loaded" % (__module_name__, __module_version__) 
 



Bien sur ce script n'a absolument aucun interet, et il serait beaucoup plus simple et pratique de faire la meme chose avec l'option "commandes utilisateur" de xchat, ce n'est qu'un exemple pour vous permettre de creer vos propres commandes. De plus ce script est tout a fait mediocre dans la mesure ou la verification des variables est inadaptée, et que le flood generé risque de vous faire lagguer si vous tapez un message pendant son execution ou si le parametrage de l'ircd ou la commande est utilisé impose aux utilisateurs une durée superieure a 2 secondes entre chaque message.




Reference : Page d'informations sur le plugin python pour xchat (en anglais)

Script TCL de perroquet

Ce script vous fera repeter tout ce que dira la cible que vous avez choisi.

Pour choisir une cible, tapez : /prq pseudo (attention de ne pas mettre un espace apres le pseudo ou ca ne fonctionnera pas)
Pour arreter le perroquet, definissez un pseudo qui n'existe pas (ex : /prq #).

Sauvez le avec ".tcl" comme extension.

set cible "#"
global cible
alias prq {
global cible
set cible $_rest
print "cible : $cible"
complete EAT_XCHAT
}
on PRIVMSG perroquet {
global cible
splitsrc
if { $cible == "$_nick" } {
/say $_rest
}
complete
}

Petit Script en Python pour Xchat

Chat-Land est un reseau qui oblige a prendre un RealName du type ASV. Un ASV par defaut est imposé a la connection, et la commande /setname vous fait kill Le bot qui provoque ce kill est Nemesis. Aussi j'ai fait ce petit script en python qui vous permet de changer votre realname automatiquement des que Nemesis est deconnecte. Pour qu'il fonctionne, il est necessaire d'ajouter Nemesis dans votre liste de notifications.

__module_name__ = "setname" 
__module_version__ = "1.0" 
__module_description__ = "change de realname quand Nemesis se deconnecte"
__module_author__ = "TroLL"
import xchat
le_pseudo = "Nemesis"
def ch_setname(word, word_eol, userdata): 
    global le_pseudo
    if word[0] == le_pseudo:
       xchat.command ("setname CA TE REGARDE PAS !!!")
    return xchat.EAT_NONE
xchat.hook_print("Notify Offline", ch_setname)
print "Plugin Setname Actif"


Cette "astuce" ne fonctionne plus, toutefois je laisse quand meme le script pour ceux qui auraient besoin d'un modele pour executer des commandes a la connexion ou la deconnexion d'un pseudo. (Pour que ce soit a la connexion, il suffit de changer la ligne :
xchat.hook_print("Notify Offline", ch_setname)
en
xchat.hook_print("Notify Online", ch_setname)

Script Python AutoGreet

Ce script envoie un message de bienvenue a toutes les personnes qui rejoignent un salon ou vous etes.
Je le presente pour information puisqu'il ne permet pas de choisir sur quels salons il sera actif, il est donc fonctionnel, mais incomplet.
Si vous l'utilisez alors que vous etes sur de nombreux salons, vous risquez de flooder involontairement (si beaucoup de personnes joignent les salons ou vous etes), voire meme de vous faire kicker de certains salon.


#Base de tout script pour xchat
#
__module_name__ = "autogreet"
__module_version__ = "1.0"
__module_description__ = "dit bonjour"
__module_author__ = "TroLL"
import xchat

# Cree un menu supplementaire qui permet d'activer ou desactiver le script
# (le script est inactif par defaut)

xchat.command('menu -p8 ADD "Scripts"')
xchat.command('menu -t0 ADD Scripts/Autogreet "ag ON" "ag OFF"')

atg = ""

# Fonction qui permet d'afficher le message de bienvenue si le script est activé
#

def abc(word, word_eol, userdata):
 global atg
 if atg == "ON":
           xchat.command ("say salut %s(%s) bienvenue sur %s" % (word[0], word[2], word[1]))
 return xchat.EAT_NONE

# Commande AG ajoutée qui permet d'activer ou de desactiver le script
#

def ag_cb(word, word_eol, userdata):
    global atg
    if len(word) < 2: 
        print "Vous devez preciser si vous l'activez ou le desactivez !"
    else: 
        atg = word[1]
    xchat.prnt("Autogreet %s" % (atg))
    return xchat.EAT_NONE

#  Hook pour la commande nouvellement créée et pour l'event "Join"
#

xchat.hook_command("ag", ag_cb, help="/AG ON/OFF Active ou desactive l'autogreet")
xchat.hook_print("Join", abc)

# Pratique pour vous signaler que le script a ete chargé dans xchat.
#

print "Autogreet Loaded !"
(erreur d'indentation rectifiée)

Generateur de texte python

import random
import string




def lettres(mini,maxi):
    laphrase=""
    nombre = random.randint(mini , maxi)
    i=0
     while i < nombre:
        laphrase=laphrase+random.choice("abcdefghijklmnopqrstuvwxyzaeiouzeiou")
        i = i+1
    return laphrase

def mots(minlpm,maxlpm,nbmots):
    z=0
    tu = ""
    while z < nbmots:
        tu=tu+lettres(minlpm , maxlpm)+" "
        z = z +1
    return tu


def lorem(qtt):
    lorem=["lorem","ipsum","dolor","sit","amet","consectetur","adipisicing","elit","sed","do","eiusmod","tempor",
"incididunt","ut","labore","et","dolore","magna","aliqua","ut","enim","ad","minim","veniam","quis","nostrud","exercitation",
"ullamco","laboris","nisi","ut","aliquip","ex","ea","commodo","consequat","duis","aute","irure","dolor","in","reprehenderit",
"in","voluptate","velit","esse","cillum","dolore","eu","fugiat","nulla","pariatur","excepteur","sint","occaecat","cupidatat",
"non","proident","sunt","in","culpa","qui","officia","deserunt","mollit","anim","id","est","laborum","sed","ut","perspiciatis",
"unde","omnis","iste","natus","error","sit","voluptatem","accusantium","doloremque","laudantium","totam","rem","aperiam","eaque",
"ipsa","quae","ab","illo","inventore","veritatis","et","quasi","architecto","beatae","vitae","dicta","sunt","explicabo","nemo",
"enim","ipsam","voluptatem","quia","voluptas","sit","aspernatur","aut","odit","aut","fugit","sed","quia","consequuntur","magni",
"dolores","eos","qui","ratione","voluptatem","sequi","nesciunt","neque","porro","quisquam","est","qui","dolorem","ipsum","quia",
"dolor","sit","amet","consectetur","adipisci","velit","sed","quia","non","numquam","eius","modi","tempora","incidunt","ut",
"labore","et","dolore","magnam","aliquam","quaerat","voluptatem","ut","enim","ad","minima","veniam","quis","nostrum",
"exercitationem","ullam","corporis","suscipit","laboriosam","nisi","ut","aliquid","ex","ea","commodi","consequatur","quis",
"autem","vel","eum","iure","reprehenderit","qui","in","ea","voluptate","velit","esse","quam","nihil","molestiae","consequatur",
"vel","illum","qui","dolorem","eum","fugiat","quo","voluptas","nulla","pariatur","at","vero","eos","et","accusamus","et","iusto",
"odio","dignissimos","ducimus","qui","blanditiis","praesentium","voluptatum","deleniti","atque","corrupti","quos","dolores","et",
"quas","molestias","excepturi","sint","occaecati","cupiditate","non","provident","similique","sunt","in","culpa","qui","officia",
"deserunt","mollitia","animi","id","est","laborum","et","dolorum","fuga","et","harum","quidem","rerum","facilis","est","et",
"expedita","distinctio","nam","libero","tempore","cum","soluta","nobis","est","eligendi","optio","cumque","nihil","impedit","quo",
"minus","id","quod","maxime","placeat","facere","possimus","omnis","voluptas","assumenda","est","omnis","dolor","repellendus",
"temporibus","autem","quibusdam","et","aut","officiis","debitis","aut","rerum","necessitatibus","saepe","eveniet","ut","et",
"voluptates","repudiandae","sint","et","molestiae","non","recusandae","itaque","earum","rerum","hic","tenetur","a","sapiente",
"delectus","ut","aut","reiciendis","voluptatibus","maiores","alias","consequatur","aut","perferendis","doloribus","asperiores","repellat"]
    rr = 0
    li = ""
    while rr<qtt:
        li=li+random.choice(lorem)+" "
        rr=rr+1
    return li

def lorem1par():
    lenphr = random.randint(8,20)
    nbphrppar = random.randint(6,12)
    a = 0
    lespar = ""
    while a<nbphrppar:
        ttt = string.strip(lorem(lenphr))
        lespar=lespar+string.capitalize(ttt)+". "
        a=a+1
    lespar=lespar+chr(10)+chr(10)
    return lespar

def loremmultipar(nblorempar):

    e=0
    resultat=""
    while e<nblorempar:
        resultat=resultat+lorem1par()
        e=e+1
    return resultat