archive- Random tools & helpful resources for IRC |
git clone git://git.acid.vegas/archive.git |
Log | Files | Refs | Archive |
hugecock.py (8800B)
1 #!/usr/bin/env python 2 # HUGECOCK (as seen in #efnetnews) 3 # Developed by acidvegas/vap0r in Python 3 4 # https://github.com/acidvegas/random 5 # hugecock.py 6 7 ''' 8 Patreon : https://www.patreon.com/efnetnews 9 Twitter : https://twitter.com/pp4l 10 YouTube : https://www.youtube.com/channel/UCrB3e00DBKTyVhGLrrGuhOw 11 ''' 12 13 import os 14 import random 15 import socket 16 import ssl 17 import time 18 import threading 19 20 # Connection 21 server = 'irc.efnet.org' 22 port = 6667 23 use_ipv6 = False 24 use_ssl = False 25 vhost = None 26 password = None 27 channel = '#efnetnews' 28 key = None 29 30 # Identity 31 nickname = 'HUGECOCK' 32 username = 'HUGECOCK' 33 realname = 'HUGECOCK' 34 35 # Globals (DO NOT EDIT) 36 random_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'random.txt') 37 38 # Formatting Control Characters / Color Codes 39 bold = '\x02' 40 italic = '\x1D' 41 underline = '\x1F' 42 reverse = '\x16' 43 reset = '\x0f' 44 white = '00' 45 black = '01' 46 blue = '02' 47 green = '03' 48 red = '04' 49 brown = '05' 50 purple = '06' 51 orange = '07' 52 yellow = '08' 53 light_green = '09' 54 cyan = '10' 55 light_cyan = '11' 56 light_blue = '12' 57 pink = '13' 58 grey = '14' 59 light_grey = '15' 60 61 def debug(msg): 62 print(f'{get_time()} | [~] - {msg}') 63 64 def error(msg, reason=None): 65 if reason: 66 print(f'{get_time()} | [!] - {msg} ({reason})') 67 else: 68 print(f'{get_time()} | [!] - {msg}') 69 70 def get_time(): 71 return time.strftime('%I:%M:%S') 72 73 class IRC(object): 74 server = server 75 port = port 76 use_ipv6 = use_ipv6 77 use_ssl = use_ssl 78 vhost = vhost 79 password = password 80 channel = channel 81 key = key 82 username = username 83 realname = realname 84 85 def __init__(self): 86 self.nickname = nickname 87 self.connected = False 88 self.last_time = 0 89 self.sock = None 90 91 def action(self, chan, msg): 92 self.sendmsg(chan, f'\x01ACTION {msg}\x01') 93 94 def color(self, msg, foreground, background=None): 95 if background: 96 return f'\x03{foreground},{background}{msg}{reset}' 97 else: 98 return f'\x03{foreground}{msg}{reset}' 99 100 def connect(self): 101 try: 102 self.create_socket() 103 self.sock.connect((self.server, self.port)) 104 if self.password: 105 self.raw('PASS ' + self.password) 106 self.raw(f'USER {self.username} 0 * :{self.realname}') 107 self.nick(self.nickname) 108 except socket.error as ex: 109 error('Failed to connect to IRC server.', ex) 110 self.event_disconnect() 111 else: 112 self.listen() 113 114 def create_socket(self): 115 if self.use_ipv6: 116 self.sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) 117 else: 118 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 119 if self.vhost: 120 self.sock.bind((self.vhost, 0)) 121 if self.use_ssl: 122 self.sock = ssl.wrap_socket(self.sock) 123 124 def event_connect(self): 125 self.connected = True 126 self.join(self.channel, self.key) 127 threading.Thread(target=self.loop).start() 128 129 def event_disconnect(self): 130 self.connected = False 131 self.sock.close() 132 time.sleep(10) 133 self.connect() 134 135 def event_join(self, nick, chan): 136 if nick.lower() == 'zardoz': 137 self.sendmsg(chan, nick) 138 self.notice(nick, f'Thank you for joining #EFNetNews, you have {0} memos waiting. Please type /server MemoServ read to check your messages.'.format(color('3', red))) 139 140 def event_kick(self, nick, chan, kicked): 141 if kicked == self.nickname and chan == self.channel: 142 time.sleep(3) 143 self.join(self.channel, self.key) 144 145 def event_message(self, nick, chan, msg): 146 if random.choice((True,False,False,False)): 147 if 'http://' in msg or 'https://' in msg or 'www.' in msg: 148 self.sendmsg(chan, underline + 'not clicking') 149 elif msg == 'h': 150 self.sendmsg(chan, 'h') 151 elif msg == 'pump': 152 self.sendmsg(chan, 'penis') 153 elif msg == 'penis': 154 self.sendmsg(chan, 'pump') 155 elif 'ddos' in msg: 156 self.sendmsg(chan, 'Dudes Drink Owl Sperm') 157 elif 'fag' in msg: 158 self.sendmsg(chan, 'i hate faggots more than i hate war in this world') 159 elif self.nickname in msg: 160 self.action(chan, '8=================================================================D') 161 elif msg.lower() == 'lol': 162 self.sendmsg(chan, 'lol') 163 elif msg == '%%': 164 self.sendmsg(chan, '%%') 165 elif 'supernets' in msg.lower(): 166 self.sendmsg(chan, self.color('HAVE YOU HEARD ABOUT IRC.SUPERNETS.ORG ???', light_blue)) 167 elif 'readerr' in msg.lower(): 168 if random.choice((True,False)): 169 self.sendmsg(chan, 'can we kill ReadErr') 170 else: 171 self.sendmsg(chan, 'can we ban ReadErr') 172 173 def event_nick_in_use(self): 174 self.nickname = self.nickname + '_' 175 self.nick(self.nickname) 176 177 def event_part(self, nick, chan): 178 self.sendmsg(nick, 'bet u wont come back pussy') 179 self.sendmsg(chan, self.color('EMOPART DETECTED', red, yellow)) 180 181 def event_quit(self, nick): 182 if time.time() - self.last_time > 15: 183 self.nick(nick) 184 self.nickname = nick 185 self.sendmsg(self.channel, 'GOT EEEEEm') 186 self.last_time = time.time() 187 188 def handle_events(self, data): 189 args = data.split() 190 if args[0] == 'PING': 191 self.raw('PONG ' + args[1][1:]) 192 elif args[1] == '001': 193 self.event_connect() 194 elif args[1] == '433': 195 self.event_nick_in_use() 196 elif args[1] in ('JOIN','KICK','PART','PRIVMSG','QUIT'): 197 nick = args[0].split('!')[0][1:] 198 if nick != self.nickname: 199 if args[1] == 'JOIN': 200 chan = args[2][1:] 201 self.event_join(nick, chan) 202 elif args[1] == 'KICK': 203 chan = args[2] 204 kicked = args[3] 205 self.event_kick(nick, chan, kicked) 206 elif args[1] == 'PART': 207 chan = args[2] 208 self.event_part(nick, chan) 209 elif args[1] == 'PRIVMSG': 210 chan = args[2] 211 msg = data.split(f'{args[0]} PRIVMSG {chan} :')[1] 212 if chan != self.nickname: 213 self.event_message(nick, chan, msg) 214 elif args[1] == 'QUIT': 215 self.event_quit(nick) 216 217 def join(self, chan, key=None): 218 if key: 219 self.raw(f'JOIN {chan} {key}') 220 else: 221 self.raw('JOIN ' + chan) 222 223 def listen(self): 224 while True: 225 try: 226 data = self.sock.recv(1024).decode('utf-8') 227 if data: 228 for line in (line for line in data.split('\r\n') if line): 229 debug(line) 230 if len(line.split()) >= 2: 231 if line.startswith('ERROR :Closing Link:'): 232 raise Exception('Connection has closed.') 233 else: 234 self.handle_events(line) 235 else: 236 error('No data recieved from server.') 237 break 238 except (UnicodeDecodeError,UnicodeEncodeError): 239 pass 240 except Exception as ex: 241 error('Unexpected error occured.', ex) 242 break 243 self.event_disconnect() 244 245 def loop(self): 246 while self.connected: 247 try: 248 time.sleep(60 * random_int(20,60)) 249 self.sendmsg(self.channel, random.choice(random_lines)) 250 except Exception as ex: 251 error('Error occured in the loop!', ex) 252 break 253 254 def nick(self, nick): 255 self.raw('NICK ' + nick) 256 257 def notice(self, target, msg): 258 self.raw(f'NOTICE {target} :{msg}') 259 260 def part(self, chan, msg=None): 261 if msg: 262 self.raw(f'PART {chan} {msg}') 263 else: 264 self.raw('PART ' + chan) 265 266 def raw(self, msg): 267 self.sock.send(bytes(msg + '\r\n', 'utf-8')) 268 269 def sendmsg(self, target, msg): 270 self.raw(f'PRIVMSG {target} :{msg}') 271 272 # Main 273 if os.path.isfile(random_file): 274 random_lines = [line.rstrip() for line in open(random_file, mode='r', encoding='utf8', errors='replace').readlines() if line] 275 else: 276 error_exit('Missing random file!') 277 IRC().connect()