mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
95 lines
3.3 KiB
Python
95 lines
3.3 KiB
Python
import socket
|
|
import time
|
|
class IRC:
|
|
queue = []
|
|
partial = ''
|
|
def __init__ ( self, network, port, name, hostName, serverName, realName ):
|
|
self.network = network
|
|
self.port = port
|
|
self.hostName = hostName
|
|
self.serverName = serverName
|
|
self.realName = realName
|
|
self.socket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
|
|
self.socket.connect ( ( self.network, self.port ) )
|
|
self.address = self.socket.getpeername()
|
|
self.nick ( name )
|
|
self.send ( 'USER ' + self.name + ' ' + self.serverName + ' ' + self.hostName + ' :' + self.realName )
|
|
def quit ( self ):
|
|
self.send ( 'QUIT' )
|
|
self.socket.close()
|
|
def send ( self, text ):
|
|
count = 0
|
|
try:
|
|
count += 1
|
|
self.socket.send ( text + '\r\n' )
|
|
except:
|
|
if count > 10:
|
|
time.sleep(1)
|
|
self.socket.send(text+'\r\n')
|
|
else:
|
|
count = 0
|
|
def nick ( self, name ):
|
|
self.name = name
|
|
self.send ( 'NICK ' + self.name )
|
|
def addressquery(self):
|
|
print self.address
|
|
aha = socket.gethostbyaddr(str(self.address[0]))
|
|
return aha
|
|
def recv ( self, size = 2048 ):
|
|
commands = self.socket.recv ( size ).split ( '\r\n' )
|
|
if len ( self.partial ):
|
|
commands [ 0 ] = self.partial + commands [ 0 ]
|
|
self.partial = ''
|
|
if len ( commands [ -1 ] ):
|
|
self.partial = commands [ -1 ]
|
|
self.queue.extend ( commands [ :-1 ] )
|
|
else:
|
|
self.queue.extend ( commands )
|
|
def retrieve ( self ):
|
|
if len ( self.queue ):
|
|
command = self.queue [ 0 ]
|
|
self.queue.pop ( 0 )
|
|
return command
|
|
else:
|
|
return False
|
|
def dismantle ( self, command ):
|
|
if command:
|
|
source = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 0 ]
|
|
parameters = command.split ( ':' ) [ 1 ].split ( ' ' ) [ 1: ]
|
|
if len(parameters) > 0:
|
|
if not len ( parameters [ -1 ] ):
|
|
parameters.pop()
|
|
if command.count ( ':' ) > 1:
|
|
parameters.append(command[command.find(":",command.find(":")+1)+1:])
|
|
return source, parameters
|
|
def privmsg ( self, destination, message ):
|
|
self.send ( 'PRIVMSG ' + destination + ' :' + message )
|
|
def handshake(self,hexstring):
|
|
self.send("PONG :"+hexstring)
|
|
def notice ( self, destination, message ):
|
|
self.send ( 'NOTICE ' + destination + ' :' + message )
|
|
def join ( self, channel ):
|
|
self.send ( 'JOIN ' + channel )
|
|
def part ( self, channel ):
|
|
self.send ( 'PART ' + channel )
|
|
def topic ( self, channel, topic = '' ):
|
|
self.send ( 'TOPIC ' + channel + ' ' + topic )
|
|
def names ( self, channel ):
|
|
self.send ( 'NAMES ' + channel )
|
|
def invite ( self, nick, channel ):
|
|
self.send ( 'INVITE ' + nick + ' ' + channel )
|
|
def mode ( self, channel, mode, nick = '' ):
|
|
self.send ( 'MODE ' + channel + ' ' + mode + ' ' + nick )
|
|
def banon(self,channel,name):
|
|
self.mode(channel,"+b",name)
|
|
def banoff(self,channel,name):
|
|
self.mode(channel,"-b",name)
|
|
def kick ( self, channel, nick, reason = '' ):
|
|
self.send ( 'KICK ' + channel + ' ' + nick + ' ' + reason )
|
|
def who ( self, pattern ):
|
|
self.send ( 'WHO ' + pattern )
|
|
def whois ( self, nick ):
|
|
self.send ( 'WHOIS ' + nick )
|
|
def whowas ( self, nick ):
|
|
self.send ( 'WHOWAS ' + nick )
|