Si vous voulez un simple « anonyme » serveur IRC tordu, cela est essentiellement la meilleure façon de s'y prendre:
from twisted.application import internet, service
from twisted.cred import checkers, portal, credentials
from twisted.cred.checkers import ICredentialsChecker
from twisted.internet import defer
from twisted.words import service as wordsservice
from zope.interface import implements
wordsRealm = wordsservice.InMemoryWordsRealm("example.com")
wordsRealm.createGroupOnRequest = True
wordsRealm.createUserOnRequest = True
class UserAnon:
implements(ICredentialsChecker)
credentialInterfaces = (credentials.IUsernamePassword, credentials.IUsernameHashedPassword)
def __init__(self):
pass
def addUser(self, username, password):
pass
def _cbPasswordMatch(self, matched, username):
return username
def requestAvatarId(self, credentials):
return defer.succeed(credentials.username)
class IRCAnonymous(wordsservice.IRCUser):
def irc_NICK(self, prefix, params):
self.password = 'doesntmatter'
wordsservice.IRCUser.irc_NICK(self, prefix, params)
checker = UserAnon()
portal = portal.Portal(wordsRealm, [checker])
servicefactory = wordsservice.IRCFactory(wordsRealm, portal)
servicefactory.protocol=IRCAnonymous
application = service.Application("ircserver")
ircservice = internet.TCPServer(6667, servicefactory)
ircservice.setServiceParent(application)
Vous pouvez ensuite exécuter ce de twistd avec twistd -nol- -y irc_server.py
. Le bit délicat comme mentionné dans les autres réponses est que les différents messages de message sur l'objet protocole tordu ont des attentes sur leurs entrées/retours, donc vous devrez aller à la documentation du module, et parfois le code source pour comprendre ce qui est nécessaire là-bas.
Donc, dites-vous que je vais dans la bonne direction, mais je vais devoir continuer à ajouter des fonctionnalités/méthodes pour supporter le protocole complet? Ou serait-il préférable de commencer à partir de zéro et de ne pas utiliser words.protocols.irc.IRC et juste utiliser des mots.Service? Je suis un peu confus quant à pourquoi il y a twisted.service et ensuite twisted.irc alors? Lequel est le bon à partir duquel travailler? – themaestro
Le but de twisted.words.service est que vous pouvez baser un serveur IRC dessus. Il peut y avoir un écart entre l'intention et la réalité; c'est une partie de Twisted qui n'est pas extrêmement utilisée. Cela ne signifie pas twisted.words.service ne fonctionnera pas pour vous, car cela dépend exactement de vos objectifs. Quant à savoir pourquoi il y a à la fois twisted.words.protocols.irc.IRC et twisted.words.service, c'est facile - le premier est utilisé comme base de la mise en œuvre de ce dernier. –