저는 Twisted를 사용하여 파이썬에서 간단한 IRC 봇을 만들려고합니다. 나는 꽤 멀리 왔지만 서버에 들어가기 위해 암호를 제공해야 할 때 문제가 발생했습니다.로그인시 파이썬 twisted irc - server 암호
특정 채널에 참여하기위한 암호를 구현하는 방법을 알고 있지만 IRC 서버에 가입 할 때 사용자 이름과 암호를 제공하는 방법을 알지 못합니다.
비밀번호를 제공해야하는 이유는 봇을 경비원 호환 (ZNC)으로 설정해야하기 때문입니다.
(비열한 들여 쓰기를 실례)
이것은 내가 지금까지 내가 서버 암호 만 채널 암호에 대한 트위스트 문서에서 아무것도 찾을 수 없습니다
import re
import urllib2
import random
import time
import sys
from HTMLParser import HTMLParser
from twisted.internet import reactor
from twisted.words.protocols import irc
from twisted.internet import protocol
def is_valid_int(num):
"""Check if input is valid integer"""
try:
int(num)
return True
except ValueError:
return False
def isAdmin(user):
with open("admins.txt", "r") as adminfile:
lines = adminfile.readlines()
if not lines:
return False
if user in lines:
return True
else:
return False
class Bot(irc.IRCClient):
def _get_nickname(self):
return self.factory.nickname
nickname = property(_get_nickname)
# @Event Signed on
def signedOn(self):
self.join(self.factory.channel)
print "Signed on as %s." % (self.nickname,)
# @Event Joined
def joined(self, channel):
print "Joined %s." % (channel,)
# @Event Privmsg
def privmsg(self, user, channel, msg):
if msg == "!time":
msg = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())
self.msg(channel, msg)
# Google searhc
elif msg.startswith("!google"):
msg = msg.split(" ", 2)
msg = "https://www.google.com/search?q=" + msg[1]
self.msg(channel, msg)
# Quit connection
elif msg.startswith("!quit"):
self.quit("byebye")
# Set nickname
elif msg.startswith("!nick"):
msg = msg.split(" ", 2)
newNick = msg[1]
self.setNick(newNick)
# Invite to channel
elif msg.startswith("!invite"):
msg = msg.split(" ", 2)
channel = msg[1]
self.join(channel)
print("Joined channel %s" % channel)
# Leave channel
elif msg.startswith("!leave"):
msg = msg.split(" ", 2)
channel = msg[1]
self.leave(channel)
print("Left channel %s" % (channel))
# Dice roll
elif msg.startswith("!roll"):
user = user.split("!", 2)
nick = user[0]
self.msg(channel, nick + " rolled a " + str(random.randint(0,100)))
print("Rolled dice...")
# Op user
elif msg.startswith("!op") or msg.startswith("!+o"):
msg = msg.split(" ", 2)
nick = msg[1]
if isAdmin(nick) == True:
self.mode(channel, True, "o", user=nick)
else:
self.msg(channel, "Not registered as admin, contact bot owner.")
# Deop user
elif msg.startswith("!deop") or msg.startswith("!-o"):
msg = msg.split(" ", 2)
nick = msg[1]
if isAdmin(nick) == True:
self.mode(channel, False, "o", user=nick)
else:
self.msg(channel, "Not registered as admin, contact bot owner.")
# Voice user
elif msg.startswith("!voice") or msg.startswith("!+v"):
msg = msg.split(" ", 2)
nick = msg[1]
if isAdmin(nick) == True:
self.mode(channel, True, "v", user=nick)
else:
self.msg(channel, "Not registered as admin, contact bot owner.")
# Devoice user
elif msg.startswith("!devoice") or msg.startswith("!-v"):
msg = msg.split(" ", 2)
nick = msg[1]
if isAdmin(nick) == True:
self.mode(channel, False, "v", user=nick)
else:
self.msg(channel, "Not registered as admin, contact bot owner.")
class BotFactory(protocol.ClientFactory):
"""Factory for our bot"""
protocol = Bot
def __init__(self, channel, nickname="IRCBot", username=None, password=None):
self.channel = channel
self.nickname = nickname
self.username = username
self.password = password
def clientConnectionLost(self, connector, reason):
print "Lost connection: (%s)" % (reason,)
def clientConnectionFailed(self, connector, reason):
print "Could not connect: %s" % (reason,)
if __name__ == "__main__":
reactor.connectTCP("my.irc.server.com", 6667, BotFactory("Channel", "IRCBot", "Name", "Password"))
reactor.run()
시도했습니다 것입니다. 어떤 도움이라도 대단히 감사합니다!
그냥 시도해도 작동하지 않는 것 같습니다. :(오류 메시지가 나타나지 않고 연결 시간이 얼마 남지 않았습니다.) –
IRCClient의 소스 코드를 확인했습니다. https://github.com/twisted/twisted/blob/trunk/ twisted/words/protocols/irc.py # L2414 함수'register'와'connectionMade'을 체크해라. 내가 본 것처럼 구현은 rfc1459 (IRC, http://tools.ietf.org/html/)와 일치한다. rfc1459.html) 섹션 4.1 연결 등록을 설명하므로 다른 곳에있는 것 같아요 – brunsgaard
IRC 서버 로그 란 무엇입니까? – brunsgaard