2015-06-22 4 views
-1

Итак, я сделал бот Twitch.tv для своего собственного канала, немного поучавшись с ним, я хотел, чтобы некоторые команды были ограничены некоторыми пользователями, и некоторые команды, которые могут сказать пользователям имя, например:Идентифицировать отправку пользователя, Python IRC

Username reply example: 

Person1: !tea 
PythonBot: Would you like some tea, Person1? 

Admin restriction example: 

Person1: !ban Person2 
PythonBot: I'm sorry, Person1, This command is restricted to admins only. 

Хорошо, Так вот код, я использую (я буду изменить его в ближайшее время, чтобы сделать это мой собственный)

import socket 
import threading 



bot_owner = '~Not Today~' 
nick = '~Not Today~' 
channel = '~Not Today~' 
server = 'irc.twitch.tv' 
password = '~Not Today~' 

queue = 13 

irc = socket.socket() 
irc.connect((server, 6667)) 

irc.send('PASS ' + password + '\r\n') 
irc.send('USER ' + nick + ' 0 * :' + bot_owner + '\r\n') 
irc.send('NICK ' + nick + '\r\n') 
irc.send('JOIN ' + channel + '\r\n') 

def message(msg): 
    global queue 
    queue = 5 
    if queue < 20: 
     irc.send('PRIVMSG' + channel + ' :' + msg + '\r\n') 
    else: 
     print 'Message Deleted' 

def queuetimer(): 
    global queue 
    queue = 0 
    threading.Timer(30,queuetimer).start() 
queuetimer() 

while True: 
    botdata = irc.recv(1204) 
    botuser = botdata.split(':')[1] 
    botuser = botuser.split('!')[0] 
    print botdata 

    if botdata.find('PING') != -1: 
     irc.send(botdata.replace('PING', 'PONG')) 
    if botdata.find('!res') != -1: 
     irc.send(botdata.replace('!res', '1600x900')) 
+0

Вы видели Python IRC-боты SuPyBot/Gribble/Limnoria? – TessellatingHeckler

+0

Работает ли ваш код? – Rishav

ответ

1

подергиваться IRC сырым сообщение походит

: JKM [email protected] PRIVMSG #trumpsc: нуждается Kappa

для выше сообщ, это фактически означает, что пользователь jkm на канале trumpsc говоря needs Kappa

для вашего кода, метод чтобы получить botuser это правильно, но вы не отправленное сообщение пользователю, добавьте следующий код должен получить сообщение

botmsg = botdata.split(':')[2] 

так что вы получите сообщение и имя пользователя, следующим шагом будет обращение с ними. Вот вам пример. Для меня я подготовил adminuserList и commmandList для другой команды, но я упрощу ее здесь.

def commmanHandler(botuser, botmsg):   # botmsg = '!ban user1' 
    command = botmsg.split(' ')[0]   # command = '!ban' 
    command = command[1:]     # command = 'ban' 
    argu = message.split(' ')[1]    # argu = 'user1' 

    if command not in commmandList:   
     raise Exception("command not support") 

    if command == 'ban':      # ban command, or using switch 
     # check if admin 
     if botuser not in adminList: 
      raise Exception("I'm sorry, " + botuser + ", This command is restricted to admins only.") 
     # admin, able to ban 
     irc.send('PRIVMSG' + channel + ' :' + '.ban ' + argu) 

затем вызвать эту функцию в цикле в то время, чтобы обрабатывать все сообщения, которое вы получите

try: 
    commmanHandler(botuser, botmsg) 
except Exception, e: 
    print e 
    irc.send('PRIVMSG' + channel + ' :' + e) 

здесь будет моим решением, а также, не забудьте дать боту модератор привилегии.

+0

Большое вам спасибо! :) – GTAirpline

Смежные вопросы