This repository was archived by the owner on Jul 5, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathIRCBot.py
More file actions
129 lines (81 loc) · 2.75 KB
/
Copy pathIRCBot.py
File metadata and controls
129 lines (81 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
from twisted.words.protocols import irc
from twisted.internet import reactor, protocol
import sys
class IRCBot(irc.IRCClient):
def __init__(self,nickname):
self.nickname = nickname
def connectionMade(self):
irc.IRCClient.connectionMade(self)
print('Connection Made!')
def connectionLost(self, reason):
irc.IRCClient.connectionLost(self, reason)
print('Connection Lost! ' + str(reason))
def command_ping(self, respt):
return 'Pong.'
def signedOn(self):
print('Joining Channel')
self.join(self.factory.channel)
def joined(self, channel):
print("Joined: " + str(channel))
def parseIRC(self,text):
print(text)
splitMessage = text.split(' ')
parsed = dict()
try:
parsed['prefix'] = splitMessage[0]
parsed['command'] = splitMessage[1]
parsed['parameters'] = splitMessage[2]
parsed['trailing'] = ' '.join(splitMessage[3:])
parsed['username'] = ((parsed['prefix'][1:]).split('!'))[0]
if(parsed['command'] == 'PRIVMSG'):
parsed['message'] = parsed['trailing'][1:]
except IndexError:
pass
return parsed
def lineReceived(self,line):
parsedIRC = self.parseIRC(line)
try:
if (parsedIRC['command'] == 'PRIVMSG'):
self.factory.messageHandler(parsedIRC['message'],parsedIRC['username'])
except IndexError:
pass
irc.IRCClient.lineReceived(self,line)
def sendMessage(self,username,message):
messageToSend = username + ': ' + message
irc.IRCClient.msg(self,self.factory.channel,str(messageToSend))
class BotFactory(protocol.ClientFactory):
def __init__(self,nickname,channel,messageHandler):
self.nickname = nickname
self.channel = channel
self.messageHandler = messageHandler
def buildProtocol(self,addr):
self.ircBot = IRCBot(self.nickname)
self.ircBot.factory = self
return self.ircBot
def clientConnnectionLost(self,connector,reason):
print('Lost connection: ' + str(reason))
print('Reconnecting...')
connector.connect()
print('Connected!')
def clientConnectionFailed(self,connector,reason):
print("Can't connect :( : " + str(reason))
reactor.stop()
def sendMessage(self,username,text):
self.ircBot.sendMessage(username,text)
class IRCBotRunner():
def __init__(self,nickname,channel):
self.nickname = nickname
self.channel = channel
def runListener(self,messageHandler):
self.factory = BotFactory(self.nickname,self.channel,messageHandler)
reactor.connectTCP("irc.freenode.net",6667,self.factory)
print("Connected..... ")
reactor.run()
print("Done!")
def sendMessage(self,username,text,icon_url=None):
self.factory.sendMessage(username,text)
#slackBot = SlackBot('test')
#slackBotListener = SlackBotListener()
#thread = threading.Thread(target = slackBotListener.run)
#slackBot.sendMessage('test','SlackBot','text!')
#slackBot.listChannels()