archive- Random tools & helpful resources for IRC |
git clone git://git.acid.vegas/archive.git |
Log | Files | Refs | Archive |
anythinggoes.py (11650B)
1 # -*- coding: utf-8 -*- 2 #!/usr/bin/env python 3 # THEGAME IRC Bot - Developed by acidvegas in Python (https://acid.vegas/random) 4 import random,socket,ssl,threading,time 5 6 # Config 7 admin_ident = 'acidvegas!*@*' 8 channel = '#anythinggoes' 9 nickserv_password = 'CHANGEME' 10 operator_password = 'CHANGEME' 11 throttle_msg = 0.15 12 13 # Formatting Control Characters / Color Codes 14 bold = '\x02' 15 italic = '\x1D' 16 underline = '\x1F' 17 reverse = '\x16' 18 reset = '\x0f' 19 white = '00' 20 black = '01' 21 blue = '02' 22 green = '03' 23 red = '04' 24 brown = '05' 25 purple = '06' 26 orange = '07' 27 yellow = '08' 28 light_green = '09' 29 cyan = '10' 30 light_cyan = '11' 31 light_blue = '12' 32 pink = '13' 33 grey = '14' 34 light_grey = '15' 35 36 def color(msg,foreground,background=None):return f'\x03{foreground},{background}{msg}{reset}' if background else f'\x03{foreground}{msg}{reset}' 37 def error(msg,reason):print(f'{get_time()} | [!] - {msg} ({reason})') 38 def get_time():return time.strftime('%I:%M:%S') 39 def random_str(size):return ''.join(random.choice('aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ') for _ in range(size)) 40 41 class Functions: 42 def banana_bomb(): 43 for i in range(random.randint(5,10)): 44 spaces=random.randint(1,120) 45 for line in banana_data: 46 Bot.sendmsg(channel,' '*spaces+line) 47 48 def chat_rain(amount): 49 words = ('ok','tru','same','wow','nice','XD','ok','np','sup','cool','nmu','lol','ah','srry','jk') 50 for i in range(amount): 51 Bot.sendmsg(channel,' '*random.randint(3,25)+random.choice(words)+' '*random.randint(10,50)+random.choice(words)+' '*random.randint(10,50)+random.choice(words)) 52 53 def crab_flood(amount): 54 counter=1 55 notify=random.randint(100,999) 56 if amount>=1000000: 57 amount=1000000 58 Bot.sendmsg(channel,color('GENTLEMEN! BEHOLD!',red)) 59 Bot.sendmsg(channel,color('THE MILLION CRAB MARCH!',red)) 60 for i in range(amount): 61 spaces=random.randint(1,120) 62 for line in crab_data: 63 Bot.sendmsg(channel,' '*spaces+line) 64 counter+=1 65 if counter==notify: 66 spaces=random.randint(1,120) 67 Bot.sendmsg(channel,color(' '*spaces+str(i)+' MOTHER FUCKING CRABS !!!',red)) 68 counter=1 69 70 def grave(nick): 71 length=len(nick) 72 Bot.sendmsg(channel,color(' '*(length+8),light_blue,light_blue)) 73 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(color(' ',light_blue,light_blue),color(' ',grey,grey),color(' '*length,light_grey,light_grey),color(' ',light_blue,light_blue))) 74 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(color(' ',light_blue,light_blue),color(' ', grey),color(' '*(length+2),light_grey,light_grey),color(' ',light_blue,light_blue))) 75 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(color(' ',light_green,light_green),color(' ', grey),color('R I P'.center(length+2),black,light_grey),color(' ',light_green,light_green))) 76 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(color(' ',green,green),color(' ', grey),color(nick.upper().center(length+2),black,light_grey),color(' ',light_green,light_green))) 77 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(color(' ',green,green),color(' ', grey),color(' '*(length+2),light_grey,light_grey),color(' ',light_green,light_green))) 78 Bot.sendmsg(channel,'{0}{1}{2}{3}{4}'.format(color(' ',light_green,light_green),color(' ',green,green),color(' ',grey),color('2018'.center(length+2),black,light_grey),color(' ', light_green,light_green))) 79 Bot.sendmsg(channel,'{0}{1}{2}{3}{4}'.format(color(' ',light_green,light_green),color(' ',green,green),color(' ',grey),color(' '*(length+2),light_grey,light_grey),color(' ',light_green,light_green))) 80 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(color(' ',light_green,light_green),color(' ', grey),color(' '*(length+2),light_grey,light_grey),color(' ', light_green,light_green))) 81 82 def rain(word,amount): 83 for i in range(amount): 84 Bot.sendmsg(channel,' '*random.randint(3,25)+word+' '*random.randint(10,50)+word+' '*random.randint(10,50)+word) 85 86 def rope(length): 87 spaces=50 88 prev=None 89 for i in range(length): 90 if random.choice((True,False)): 91 if prev!='╱':spaces+=1 92 char='╲' 93 else: 94 if prev!='╲':spaces-=1 95 char='╱' 96 Bot.sendmsg(channel,' '*spaces+char) 97 prev=char 98 Bot.sendmsg(channel,' '*(spaces-2)+'(;))') 99 100 def wave(msg,lines,spaces,hilite): 101 rainbow=['04','08','09','11','12','13'] 102 spacer=15 103 spaces+=spacer 104 toggle=True 105 data=list() 106 for i in range(lines): 107 if hilite: 108 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format((Bot.nicks[0]+': ').ljust(spacer),color('░▒▓',rainbow[1]),color(f' {msg} ',rainbow[0],rainbow[1]),color('▓▒░',rainbow[1]))) 109 Bot.nicks.append(Bot.nicks.pop(0)) 110 else: 111 Bot.sendmsg(channel, '{0}{1}{2}{3}'.format(' '*spacer,color('░▒▓',rainbow[1]),color(f' {msg} ',rainbow[0],rainbow[1]),color('▓▒░',rainbow[1]))) 112 rainbow.append(rainbow.pop(0)) 113 if toggle:spacer+=1 114 else:spacer-=1 115 if spacer==spaces:toggle=False 116 elif spacer==15:toggle=True 117 118 def worm(length): 119 spacer=random.randint(10,100) 120 Bot.sendmsg(channel,'{0} {1}{2}'.format(' '*spacer,color('░▒▓',pink),color('▓▒░',pink))) 121 Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink))) 122 Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink))) 123 for i in range(length): 124 Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink))) 125 if random.choice((True,False)):spacer += 1 126 else:spacer-=1 127 Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color('_ _',black,pink),color('▓▒░',pink))) 128 Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color('o o',black,pink),color('▓▒░',pink))) 129 Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink))) 130 131 class WormNet(threading.Thread): 132 def __init__(self): 133 self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 134 threading.Thread.__init__(self) 135 def run(self): 136 Bot.wormnet=True 137 try: 138 self.sock.connect(('wormnet1.team17.com',6667)) 139 self.raw('PASS ELSILRACLIHP') 140 self.raw('USER Username hostname servername :48 0 US 3.7.2.1') 141 self.raw('NICK SUPERNETS') 142 while True: 143 data=self.sock.recv(1024).decode('utf-8') 144 for line in (line for line in data.split('\r\n') if len(line.split())>=2): 145 Bot.sendmsg_wormnet('raw',cyan,line) 146 args=line.split() 147 if line.startswith('ERROR :Closing Link:'):raise Exception('Connection has closed.') 148 elif args[0]=='PING':self.raw('PONG '+args[1][1:]) 149 elif args[1]=='001':self.raw('JOIN '+channel) 150 elif args[1]=='366':Bot.sendmsg_wormnet('join',green,'Joined #anythinggoes channel!') 151 except (UnicodeDecodeError,UnicodeEncodeError):pass 152 except Exception as ex: 153 Bot.sendmsg_wormnet('error',red,'Unknown error occured!',ex) 154 self.sock.close() 155 Bot.wormnet=False 156 Bot.sendmsg_wormnet('disconnected',red,'Lost connection to the WormNet relay!') 157 def raw(self,msg):self.sock.send(bytes(msg+'\r\n','utf-8')) 158 def sendmsg(self,target,msg):self.raw(f'PRIVMSG {target} :{msg}') 159 160 class IRC(object): 161 def __init__(self): 162 self.nicks=list() 163 self.echo=False 164 self.sock=None 165 self.wormnet=False 166 167 def connect(self): 168 try: 169 self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 170 self.sock.connect(('irc.supernets.org',6667)) 171 self.raw(f'USER THEG 0 * :YOU LOST THE GAME') 172 self.raw('NICK THEGAME') 173 while True: 174 data = self.sock.recv(1024).decode('utf-8') 175 print(data) 176 for line in (line for line in data.split('\r\n') if len(line.split()) >= 2): 177 print(f'{get_time()} | [~] - {line}') 178 args = line.split() 179 if args[0]=='PING': 180 self.raw('PONG '+args[1][1:]) 181 elif args[1]=='001': 182 self.raw('MODE THEGAME +BDd') 183 self.sendmsg('NickServ','IDENTIFY THEGAME '+nickserv_password) 184 self.raw(f'OPER thegame {operator_password}') 185 self.raw('JOIN '+channel) 186 elif args[1]=='433':self.raw('NICK THE_GAME_'+str(random.randint(10,99))) 187 elif args[1]=='353' and len(args)>=6:self.nicks+=' '.join(args[5:])[2:].split() 188 elif args[1]=='JOIN' and len(args)==3:self.raw('NOTICE {0} :Thank you for joining #AnythingGoes, you have {1} memo(s) waiting. Please type /server MemoServ read to check your messages.'.format(args[0].split('!')[0][1:],color(random.randint(1,3),red))) 189 elif args[1]=='PART' and len(args)>=3: 190 self.sendmsg(args[2],color('EMO-PART DETECTED',red)) 191 self.sendmsg(args[0].split('!')[0][1:],'bet u wont come back pussy...') 192 elif args[1]=='PRIVMSG' and len(args)>=4: 193 ident=args[0][1:] 194 nick=args[0].split('!')[0][1:] 195 chan=args[2] 196 msg= ' '.join(args[3:])[1:] 197 if chan==channel:self.event_message(ident,nick,chan,msg) 198 elif args[1]=='QUIT':Functions.grave(args[0].split('!')[0][1:]) 199 except(UnicodeDecodeError,UnicodeEncodeError):pass 200 except Exception as ex: 201 print(ex) 202 self.sock.close() 203 time.sleep(15) 204 self.connect() 205 206 def event_message(self,ident,nick,chan,msg): 207 args=msg.split() 208 if msg[:1]=='!': 209 if msg=='!bananabomb':Functions.banana_bomb() 210 elif msg=='!crate': 211 for line in crate_data:self.sendmsg(channel,line) 212 elif msg=='!echo': 213 self.echo=False if self.echo else True 214 elif msg=='refresh': 215 self.nicks=list() 216 self.raw('NAMES #anythinggoes') 217 elif msg=='!wormnet':WORMS.start() 218 elif msg=='!worms': 219 for line in worms_data:self.sendmsg(channel, line) 220 elif len(args)==2: 221 if args[1].isdigit(): 222 amount=int(args[1]) 223 if args[0]=='!chatrain': 224 if amount<=100 or ident==admin_ident:Functions.chat_rain(amount) 225 else:self.sendmsg(chan,'Max: 100') 226 elif msg.startswith('!crabflood'): 227 if amount<=10 or ident==admin_ident:Functions.crab_flood(amount) 228 else:self.sendmsg(chan,'Max: 10') 229 elif msg.startswith('!rope'): 230 if amount<=100 or ident==admin_ident:Functions.rope(amount) 231 else:self.sendmsg(chan,'Max: 100') 232 elif msg.startswith('!worm'): 233 if amount<=100 or ident==admin_ident:Functions.worm(amount) 234 else:self.sendmsg(chan,'Max: 100') 235 elif args[0]=='!rain' and len(args)>=3: 236 amount=args[1] 237 data=' '.join(args[2:]) 238 if args[1].isdigit(): 239 if int(args[1])<=100 or ident==admin_ident:Functions.rain(data,int(args[1])) 240 else:self.sendmsg(chan,'Max: 100') 241 elif args[0] in ('!wave','!wavehl') and len(args)>=4: 242 lines =args[1] 243 spaces=args[2] 244 data=' '.join(args[3:]) 245 if lines.isdigit() and spaces.isdigit(): 246 if int(lines)<=100 or ident==admin_ident: 247 if args[0]=='!wave': 248 Functions.wave(data,int(lines),int(spaces),False) 249 else: 250 Functions.wave(data,int(lines),int(spaces),True) 251 else:self.sendmsg(chan,'Max: 100') 252 elif self.echo:self.sendmsg(chan,msg) 253 254 def raw(self,msg):self.sock.send(bytes(msg+'\r\n','utf-8')) 255 def sendmsg(self,target,msg): 256 time.sleep(throttle_msg) 257 self.raw(f'PRIVMSG {target} :{msg}') 258 def sendmsg_wormnet(self,title,title_color,msg,extra=None): 259 if extra:self.sendmsg(channel,'[{0}] [{1}] {2} {3}'.format(color('WORMNET',pink),color(title,title_color),msg,color('({0})'.format(extra),grey))) 260 else:self.sendmsg(channel,'[{0}] [{1}] {2}'.format(color('WORMNET',pink),color(title,title_color),msg)) 261 262 # Main 263 banana_data=open('data/banana.txt').readlines() 264 crab_data=open('data/crab.txt').readlines() 265 crate_data=open('data/crate.txt').readlines() 266 worms_data=open('data/worms.txt').readlines() 267 Bot=IRC() 268 WORMS=WormNet() 269 Bot.connect()