random/irc/bots/anythinggoes/anythinggoes.py

270 lines
11 KiB
Python
Raw Normal View History

2019-06-27 19:39:56 -07:00
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# THEGAME IRC Bot - Developed by acidvegas in Python (https://acid.vegas/random)
import random,socket,ssl,threading,time
# Config
admin_ident = 'acidvegas!*@*'
2019-06-27 19:39:56 -07:00
channel = '#anythinggoes'
nickserv_password = 'CHANGEME'
operator_password = 'CHANGEME'
throttle_msg = 0.15
# Formatting Control Characters / Color Codes
bold = '\x02'
italic = '\x1D'
underline = '\x1F'
reverse = '\x16'
reset = '\x0f'
white = '00'
black = '01'
blue = '02'
green = '03'
red = '04'
brown = '05'
purple = '06'
orange = '07'
yellow = '08'
light_green = '09'
cyan = '10'
light_cyan = '11'
light_blue = '12'
pink = '13'
grey = '14'
light_grey = '15'
def color(msg,foreground,background=None):return f'\x03{foreground},{background}{msg}{reset}' if background else f'\x03{foreground}{msg}{reset}'
def error(msg,reason):print(f'{get_time()} | [!] - {msg} ({reason})')
def get_time():return time.strftime('%I:%M:%S')
def random_str(size):return ''.join(random.choice('aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ') for _ in range(size))
class Functions:
def banana_bomb():
for i in range(random.randint(5,10)):
spaces=random.randint(1,120)
for line in banana_data:
Bot.sendmsg(channel,' '*spaces+line)
def chat_rain(amount):
words = ('ok','tru','same','wow','nice','XD','ok','np','sup','cool','nmu','lol','ah','srry','jk')
for i in range(amount):
Bot.sendmsg(channel,' '*random.randint(3,25)+random.choice(words)+' '*random.randint(10,50)+random.choice(words)+' '*random.randint(10,50)+random.choice(words))
def crab_flood(amount):
counter=1
notify=random.randint(100,999)
if amount>=1000000:
amount=1000000
Bot.sendmsg(channel,color('GENTLEMEN! BEHOLD!',red))
Bot.sendmsg(channel,color('THE MILLION CRAB MARCH!',red))
for i in range(amount):
spaces=random.randint(1,120)
for line in crab_data:
Bot.sendmsg(channel,' '*spaces+line)
counter+=1
if counter==notify:
spaces=random.randint(1,120)
Bot.sendmsg(channel,color(' '*spaces+str(i)+' MOTHER FUCKING CRABS !!!',red))
counter=1
def grave(nick):
length=len(nick)
Bot.sendmsg(channel,color(' '*(length+8),light_blue,light_blue))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
def rain(word,amount):
for i in range(amount):
Bot.sendmsg(channel,' '*random.randint(3,25)+word+' '*random.randint(10,50)+word+' '*random.randint(10,50)+word)
def rope(length):
spaces=50
prev=None
for i in range(length):
if random.choice((True,False)):
if prev!='':spaces+=1
char=''
else:
if prev!='':spaces-=1
char=''
Bot.sendmsg(channel,' '*spaces+char)
prev=char
Bot.sendmsg(channel,' '*(spaces-2)+'(;))')
def wave(msg,lines,spaces,hilite):
rainbow=['04','08','09','11','12','13']
spacer=15
spaces+=spacer
toggle=True
data=list()
for i in range(lines):
if hilite:
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])))
Bot.nicks.append(Bot.nicks.pop(0))
else:
Bot.sendmsg(channel, '{0}{1}{2}{3}'.format(' '*spacer,color('░▒▓',rainbow[1]),color(f' {msg} ',rainbow[0],rainbow[1]),color('▓▒░',rainbow[1])))
rainbow.append(rainbow.pop(0))
if toggle:spacer+=1
else:spacer-=1
if spacer==spaces:toggle=False
elif spacer==15:toggle=True
def worm(length):
spacer=random.randint(10,100)
Bot.sendmsg(channel,'{0} {1}{2}'.format(' '*spacer,color('░▒▓',pink),color('▓▒░',pink)))
Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink)))
Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink)))
for i in range(length):
Bot.sendmsg(channel,'{0}{1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink)))
if random.choice((True,False)):spacer += 1
else:spacer-=1
Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color('_ _',black,pink),color('▓▒░',pink)))
Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color('o o',black,pink),color('▓▒░',pink)))
Bot.sendmsg(channel,'{0} {1}{2}{3}'.format(' '*spacer,color('░▒▓',pink),color(' ',black,pink),color('▓▒░',pink)))
class WormNet(threading.Thread):
def __init__(self):
self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
threading.Thread.__init__(self)
def run(self):
Bot.wormnet=True
try:
self.sock.connect(('wormnet1.team17.com',6667))
self.raw('PASS ELSILRACLIHP')
self.raw('USER Username hostname servername :48 0 US 3.7.2.1')
self.raw('NICK SUPERNETS')
while True:
data=self.sock.recv(1024).decode('utf-8')
for line in (line for line in data.split('\r\n') if len(line.split())>=2):
Bot.sendmsg_wormnet('raw',cyan,line)
args=line.split()
if line.startswith('ERROR :Closing Link:'):raise Exception('Connection has closed.')
elif args[0]=='PING':self.raw('PONG '+args[1][1:])
elif args[1]=='001':self.raw('JOIN '+channel)
elif args[1]=='366':Bot.sendmsg_wormnet('join',green,'Joined #anythinggoes channel!')
except (UnicodeDecodeError,UnicodeEncodeError):pass
except Exception as ex:
Bot.sendmsg_wormnet('error',red,'Unknown error occured!',ex)
self.sock.close()
Bot.wormnet=False
Bot.sendmsg_wormnet('disconnected',red,'Lost connection to the WormNet relay!')
def raw(self,msg):self.sock.send(bytes(msg+'\r\n','utf-8'))
def sendmsg(self,target,msg):self.raw(f'PRIVMSG {target} :{msg}')
class IRC(object):
def __init__(self):
self.nicks=list()
self.echo=False
self.sock=None
self.wormnet=False
def connect(self):
try:
self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.sock.connect(('irc.supernets.org',6667))
2019-06-27 19:39:56 -07:00
self.raw(f'USER THEG 0 * :YOU LOST THE GAME')
self.raw('NICK THEGAME')
while True:
data = self.sock.recv(1024).decode('utf-8')
print(data)
2019-06-27 19:39:56 -07:00
for line in (line for line in data.split('\r\n') if len(line.split()) >= 2):
print(f'{get_time()} | [~] - {line}')
args = line.split()
if args[0]=='PING':
self.raw('PONG '+args[1][1:])
2019-06-27 19:39:56 -07:00
elif args[1]=='001':
self.raw('MODE THEGAME +BDd')
self.sendmsg('NickServ','IDENTIFY THEGAME '+nickserv_password)
self.raw(f'OPER thegame {operator_password}')
self.raw('JOIN '+channel)
elif args[1]=='433':self.raw('NICK THE_GAME_'+str(random.randint(10,99)))
elif args[1]=='353' and len(args)>=6:self.nicks+=' '.join(args[5:])[2:].split()
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)))
elif args[1]=='PART' and len(args)>=3:
self.sendmsg(args[2],color('EMO-PART DETECTED',red))
self.sendmsg(args[0].split('!')[0][1:],'bet u wont come back pussy...')
elif args[1]=='PRIVMSG' and len(args)>=4:
ident=args[0][1:]
nick=args[0].split('!')[0][1:]
chan=args[2]
msg= ' '.join(args[3:])[1:]
if chan==channel:self.event_message(ident,nick,chan,msg)
elif args[1]=='QUIT':Functions.grave(args[0].split('!')[0][1:])
except(UnicodeDecodeError,UnicodeEncodeError):pass
except Exception as ex:
print(ex)
self.sock.close()
2019-06-27 19:39:56 -07:00
time.sleep(15)
self.connect()
def event_message(self,ident,nick,chan,msg):
args=msg.split()
if msg[:1]=='!':
if msg=='!bananabomb':Functions.banana_bomb()
elif msg=='!crate':
for line in crate_data:self.sendmsg(channel,line)
elif msg=='!echo':
self.echo=False if self.echo else True
elif msg=='refresh':
self.nicks=list()
self.raw('NAMES #anythinggoes')
elif msg=='!wormnet':WORMS.start()
2019-06-27 19:39:56 -07:00
elif msg=='!worms':
for line in worms_data:self.sendmsg(channel, line)
elif len(args)==2:
if args[1].isdigit():
amount=int(args[1])
if args[0]=='!chatrain':
if amount<=100 or ident==admin_ident:Functions.chat_rain(amount)
else:self.sendmsg(chan,'Max: 100')
elif msg.startswith('!crabflood'):
if amount<=10 or ident==admin_ident:Functions.crab_flood(amount)
else:self.sendmsg(chan,'Max: 10')
elif msg.startswith('!rope'):
if amount<=100 or ident==admin_ident:Functions.rope(amount)
else:self.sendmsg(chan,'Max: 100')
elif msg.startswith('!worm'):
if amount<=100 or ident==admin_ident:Functions.worm(amount)
else:self.sendmsg(chan,'Max: 100')
elif args[0]=='!rain' and len(args)>=3:
amount=args[1]
data=' '.join(args[2:])
if args[1].isdigit():
if int(args[1])<=100 or ident==admin_ident:Functions.rain(data,int(args[1]))
else:self.sendmsg(chan,'Max: 100')
elif args[0] in ('!wave','!wavehl') and len(args)>=4:
lines =args[1]
spaces=args[2]
data=' '.join(args[3:])
if lines.isdigit() and spaces.isdigit():
if int(lines)<=100 or ident==admin_ident:
if args[0]=='!wave':
Functions.wave(data,int(lines),int(spaces),False)
else:
Functions.wave(data,int(lines),int(spaces),True)
else:self.sendmsg(chan,'Max: 100')
elif self.echo:self.sendmsg(chan,msg)
def raw(self,msg):self.sock.send(bytes(msg+'\r\n','utf-8'))
def sendmsg(self,target,msg):
time.sleep(throttle_msg)
self.raw(f'PRIVMSG {target} :{msg}')
def sendmsg_wormnet(self,title,title_color,msg,extra=None):
if extra:self.sendmsg(channel,'[{0}] [{1}] {2} {3}'.format(color('WORMNET',pink),color(title,title_color),msg,color('({0})'.format(extra),grey)))
else:self.sendmsg(channel,'[{0}] [{1}] {2}'.format(color('WORMNET',pink),color(title,title_color),msg))
# Main
banana_data=open('data/banana.txt').readlines()
crab_data=open('data/crab.txt').readlines()
crate_data=open('data/crate.txt').readlines()
worms_data=open('data/worms.txt').readlines()
Bot=IRC()
WORMS=WormNet()
Bot.connect()