5

IRC サーバー/クライアント用のねじれたライブラリを少し試しているところです。IRC クライアントを実装する方法の良い例をいくつか見つけましたが、サーバー側で何か良いものを見つけたようです。ツイストで基本的な IRC サーバーを作成する方法について、誰か洞察を提供できますか?

編集:これから構築するのはどうですか?ここで正しい方向に進んでいますか?

from twisted.internet.protocol import ServerFactory
from twisted.internet import reactor
from twisted.words.protocols.irc import IRC


class IRCServer(IRC):
    def connectionMade(self):
        print "client connected"

    def handleCommand(self, command, prefix, params):
        print "handle comm"
        IRC.handleCommand(self, command, prefix, params)

    def dataReceived(self, data):
        print "data: %s" % data
        IRC.dataReceived(self, data)

    def irc_unknown(self, prefix, command, params):
        print "%s, %s, %s, IRC UNKNOWN" % (prefix, command, params)

    def irc_USER(self, prefix, params):
        print "USER: %s, %s" % (prefix, params)

    def irc_NICK(self, prefix, params):
        print "NICK: %s, %s" % (prefix, params)



class IRCServerFactory(ServerFactory):
    protocol = IRCServer

factory = IRCServerFactory()
reactor.listenTCP(8002, factory)
reactor.run()

チャンネルに参加しようとしても、できません。コマンドのハンドラーがないことに関連するエラーが発生していたので、irc_USER および irc_NICK メソッドを作成しましたが、エラーを取り除くだけで、接続できない/動作しないという問題は解決しませんでした。

4

3 に答える 3

8

おそらくこのようなものですか?

exarkun@boson:/tmp/irc-server$ cat > passwd
alice:secret
bob:19820522
exarkun@boson:/tmp/irc-server$ twistd -n words --irc-port 6667 --auth file:passwd
2010-06-29 11:51:26-0400 [-] Log opened.
2010-06-29 11:51:26-0400 [-] twistd 10.0.0+r29436 (/usr/bin/python 2.6.4) starting up.
2010-06-29 11:51:26-0400 [-] reactor class: twisted.internet.selectreactor.SelectReactor.
2010-06-29 11:51:26-0400 [-] twisted.words.service.IRCFactory starting on 6667
2010-06-29 11:51:26-0400 [-] Starting factory <twisted.words.service.IRCFactory instance at 0x9ddbf8c>

これがどのように実装されているかを確認したい場合は、twisted/words/tap.pyを参照してください。

twisted.words.protocols.irc.IRCIRC サーバーの解析部分のみの非常に基本的な実装です。チャネル、モード、メッセージなどの実際のサーバー ロジックは実装していません。その上にサーバーを構築できますが、ほぼすべてを構築する必要があります。これはまさに、によって呼び出されたコードがtwistd words行うことです。実装を参照して、質問のコードが何を目指しているかの成功例を確認することをお勧めします。

于 2010-06-29T15:53:35.403 に答える
0

私はこの本に出くわしました。この本には、twistd ワード サーバーで完全に実行され、チャネルなどを作成できる次のコードが含まれています。本からのコードは次のとおりです。

from twisted.cred import checkers, portal
from twisted.internet import reactor
from twisted.words import service

wordsRealm = service.InMemoryWordsRealm("example.com")
wordsRealm.createGroupOnRequest = True

checker = checkers.FilePasswordDB("authfile.txt")
portal = portal.Portal(wordsRealm, [checker])

reactor.listenTCP(6667, service.IRCFactory(wordsRealm, portal))
reactor.run()

本: http://books.google.com/books?id=_g5UNxWUKsMC&printsec=frontcover#v=onepage 119 ページに移動すると、説明が表示されます。本を買ってください、それは良い本です。

于 2014-10-26T01:48:46.747 に答える