2015-08-27 3 views
1

Вот моя проблема: бот загружает информацию IRC в порядке, но когда ее предполагается идентифицировать, он этого не делает.IRC Bot Python | Идентифицировать прозвище

Ниже приведена соответствующая часть кода. Я думаю, проблема в строке 9, но я не могу понять, почему.

import socket 

server = #ServerName 
channel = #ChannelName 
botnick = #BotName 
password = #Password (string) 

def connect(channel, password): # This function is used on connect. 
    ircsock.send("PRIVMSG" + " :NICKSERV Identify " + password +"\n") #Problem Here 
    ircsock.send("JOIN "+ channel +"\n") 

ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
ircsock.connect((server, 6667)) # Here we connect to the server using the port 6667 
ircsock.send("USER "+ botnick +" "+ botnick +" "+ botnick +":Just testing .\n") # user authentication 
ircsock.send("NICK "+ botnick +"\n") 

connect(channel, password) #Join the channel and identify the nick using the functions we previously defined 

Заранее спасибо.

Решение: Установив функцию Соединить как писал, это первая вещь, чтобы называться Затем сервер пытается подключиться до того, USER/НИК.

def create_connection(): 
    global ircsock 
    ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    ircsock.connect((server, 6667)) # Here we connect to the server using the port 6667 
    ircsock.send("USER "+ botnick +" "+ botnick +" "+ botnick +":This bot is a result of GStones mastery .\n") # user authentication 
    ircsock.send("NICK "+ botnick +"\n") # here we actually assign the nick to the bot 
    time.sleep(5) 
    connect(channel, password) # Join the channel and identify the nick using the functions we previously defined 

create_connection() 

Благодаря я \ OFF

+0

Что такое 'ircsock'? –

+0

ircsock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) –

+0

Бот входит в сервер irc, но пропускает выполнение функции подключения, поэтому NickServ запрашивает команду идентификации: "NOTICE Botman: Этот псевдоним зарегистрирован. другое прозвище или идентифицировать через/msg NickServ ident " –

ответ

3

Вы не создали сокет, так что не будет установлено соединение.

ircsock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) создает розетку.

Кроме того, вам необходимо подключиться к серверу, прежде чем использовать ircsock.send().

ircsock.connect ((server, serverPort)) подключается к серверу. Этот пример должен работать:

import socket 

server = #ServerName 
serverPort = #Server Port number 
channel = #ChannelName 
botnick = #BotName 
password = #Password (string) 

def connect(channel, password): # This function is used on connect. 
    ircsock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 
    ircsock.connect ((server, serverPort)) 
    ircsock.send("USER "+ botnick +" "+ botnick +" "+ botnick +":Just testing .\n") # user authentication 
    ircsock.send("NICK "+ botnick +"\n") 
    ircsock.send("PRIVMSG" + " NICKSERV :identify " + password +"\n") #Problem Here 
    ircsock.send("JOIN "+ channel +"\n") 

connect(channel, password) #Join the channel and identify the nick using the functions we previously defined 
+0

Я пропустил эту часть кода. Я уже редактировал сообщение с подключением к сокету. Но спасибо за помощь в любом случае. –

+0

Хорошо, я не знал об этом, потому что в исходном посте вы не указали эту часть кода. Пожалуйста, попробуйте ответ от sidehowbarker и сообщите нам, если он сработает? –

+0

Приношу свои извинения. Уже пробовал. К сожалению, это не удалось. Код запускается без ошибок, и бот обращается к irc, но не идентифицирует ник. –

1

Я думаю, что вы могли бы иметь синтаксическую ошибку в вашем NickServ сообщении. Вы можете попробовать:

ircsock.send("PRIVMSG NickServ :identify " + password + "\n") 
+0

думаю тоже. По-прежнему нет результата с вашим кодом. –

+0

Какое сообщение об ошибке вы получаете? – sideshowbarker

+0

Код работает без ошибок, и бот обращается к irc, но не идентифицирует ник. –