random

- collection of un-sorted bollocks
git clone git://git.acid.vegas/random.git
Log | Files | Refs | Archive

commit 970990fe0d2a8fbbc4ec937f62e665825fc6fbb3
parent d88c916f1d79daef9a4ffb69923b73240b46b015
Author: acidvegas <acid.vegas@acid.vegas>
Date: Thu, 27 Apr 2023 23:01:35 -0400

shake up

Diffstat:
D2fa.py | 46----------------------------------------------
Dacidbox/.bashrc | 54------------------------------------------------------
Dacidbox/.scripts/cmds | 21---------------------
Dacidbox/.scripts/contact | 12------------
Dacidbox/.scripts/rules | 11-----------
Dacidbox/.scripts/vhosts | 12------------
Dacidbox/setup | 48------------------------------------------------
Rnetworking/ampscan.py -> ampscan.py | 0
Mbandcamp.py | 1+
Dbtkb.sh | 13-------------
Dclitter.py | 46----------------------------------------------
Dcmus-now | 5-----
Dcoingecko.py | 61-------------------------------------------------------------
Rnetworking/ddosmonit.sh -> ddosmonit | 0
Dgmail.py | 6------
Mirc/bots/badparent.py | 2+-
Dirc/bots/cancer.py | 500-------------------------------------------------------------------------------
Dirc/bots/jupiter.py | 309-------------------------------------------------------------------------------
Airc/bots/spiderweb.py | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Dlyrics.py | 8--------
Dmutag | 13-------------
Dnetworking/discover.py | 39---------------------------------------
Dnetworking/mullvad.sh | 30------------------------------
Dnetworking/ovh6 | 6------
Dnetworking/v6gen.py | 14--------------
Dpass | 66------------------------------------------------------------------
Rnetworking/riseup.sh -> riseup.sh | 0
Dtables.py | 20--------------------
Dtodo | 18------------------
Dvps.sh | 26--------------------------

30 files changed, 52 insertions(+), 1385 deletions(-)

diff --git a/2fa.py b/2fa.py
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-# Two-factor Authentication (2FA) Helper - Developed by acidvegas in Python (https://acid.vegas/random)
-
-'''
-Requirements:
-	pyotp  (https://pypi.org/project/pyotp/)
-	qrcode (https://pypi.org/project/qrcode/)
-'''
-
-import io, sys, time
-
-try:
-	import pyotp
-except ImportError:
-	raise SystemExit('missing required \'pyotp\' module! (https://pypi.org/project/pyotp/)')
-try:
-	import qrcode
-except ImportError:
-	raise SystemExit('missing required \'qrcode\' module! (https://pypi.org/project/qrcode/)')
-
-def qrgen(data):
-	stdout = sys.stdout
-	sys.stdout = io.StringIO()
-	qr = qrcode.QRCode(border=1)
-	qr.add_data(data)
-	qr.make(fit=True)
-	qr.print_ascii(invert=True)
-	output = sys.stdout.getvalue()
-	sys.stdout = stdout
-	return output
-
-name = input('name   : ')
-issuer = input('issuer : ')
-secret = input('secret : ') or pyotp.random_base32()
-uri = pyotp.totp.TOTP(secret).provisioning_uri(name, issuer)
-qr = qrgen(uri).replace(' ', ' ')[:-1]
-max_len = len(qr.split('\n')[1])
-print(f'{uri}\n{qr}')
-del name, issuer, uri, qr
-while True:
-	code = pyotp.TOTP(secret).now()
-	seconds = int(time.strftime('%S'))
-	remain = 60-seconds if seconds >= 30 else 30-seconds
-	print(f'{code} ({remain})'.center(max_len), end='\r')
-	time.sleep(1)
-\ No newline at end of file
diff --git a/acidbox/.bashrc b/acidbox/.bashrc
@@ -1,54 +0,0 @@
-[[ $- != *i* ]] && return
-
-export LC_CTYPE=en_US.UTF-8
-export LC_ALL=en_US.UTF-8
-
-alias backup='rm ~/.backup/*.tar.gz && tar cvf ~/.backup/backup-DATE,tar.gz ~/'
-alias cmds='sh ~/.scripts/cmds'
-alias colors='sh ~/.scripts/colors.sh'
-alias contact='sh ~/.scripts/contact'
-alias diff='diff --color=auto'
-alias dvtm-help='cat ~/.scripts/dvtm-help'
-alias grep='grep --color=auto'
-alias ls='ls --color=auto'
-alias rtach='abduco -a main'
-alias rules='sh ~/.scripts/rules'
-alias startx='abduco -c main sh ~/.scripts/dvtm-status.sh'
-alias tb='(exec 3<>/dev/tcp/termbin.com/9999; cat >&3; cat <&3; exec 3<&-)'
-alias title='echo -ne "\033]0;$*\007"'
-alias vhosts='sh ~/.scripts/vhosts'
-
-extract () {
-	if [ -f $1 ] ; then
-		case $1 in
-			*.tar.bz2) tar xjvf $1   ;;
-			*.tar.gz)  tar xzvf $1   ;;
-			*.bz2)     bzip2 -d $1   ;;
-			*.rar)     unrar2dir $1  ;;
-			*.gz)      gunzip $1     ;;
-			*.tar)     tar xf $1     ;;
-			*.tbz2)    tar xjf $1    ;;
-			*.tgz)     tar xzf $1    ;;
-			*.zip)     unzip2dir $1  ;;
-			*.Z)       uncompress $1 ;;
-			*.7z)      7z x $1       ;;
-			*.ace)     unace x $1    ;;
-			*)         echo "unkown archive format" ;;
-		esac
-	else
-		echo "'$1' is not a valid file"
-	fi
-}
-
-rnd() {
-	cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $1 | head -n 1
-}
-
-transfer() {
-	tmpfile=$( mktemp -t transferXXX )
-	curl -H "Max-Downloads: 1" -H "Max-Days: 1" --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile;
-	cat $tmpfile;
-	rm -f $tmpfile;
-}
-
-PS1='\e[1;34m> \e[0;32m\w \e[0;37m: '
diff --git a/acidbox/.scripts/cmds b/acidbox/.scripts/cmds
@@ -1,21 +0,0 @@
-#! /bin/sh
-BLUE='\033[1;34m'
-CYAN='\033[0;36m'
-GREY='\033[1;30m'
-RESET='\033[0m'
-YELLOW='\033[0;33m'
-echo -e "\n[${BLUE}INFORMATION COMMANDS${RESET}]"
-echo -e " ${GREY}* ${CYAN}colors${YELLOW}\tDisplay terminal color support"
-echo -e " ${GREY}* ${CYAN}contact${YELLOW}\tInformation on how to contact the system administrator"
-echo -e " ${GREY}* ${CYAN}rules${YELLOW}\tDisplay the server rules"
-echo -e " ${GREY}* ${CYAN}vhosts${YELLOW}\tList all of the Virtual Hosts"
-echo -e "\n${RESET}[${BLUE}SESSION COMMANDS${RESET}]"
-echo -e " ${GREY}* ${CYAN}dvtm-help${YELLOW}\tInformation about dvtm and how to use it"
-echo -e " ${GREY}* ${CYAN}rtach${YELLOW}\tReattach to your main abduco session ${GREY}(Create session with startx)"
-echo -e " ${GREY}* ${CYAN}startx${YELLOW}\tStart a dvtm session in abduco ${GREY}(See dvtm-help for more information)"
-echo -e "\n${RESET}[${BLUE}OTHER COMMANDS${RESET}]"
-echo -e " ${GREY}* ${CYAN}backup${YELLOW}\tCreate a backup tar file of your home directory ${GREY}(Saves to the ~/.backup/ directory)"
-echo -e " ${GREY}* ${CYAN}extract${YELLOW}\tExtract any archive format ${GREY}(Usage: extract archive.tar.gz)"
-echo -e " ${GREY}* ${CYAN}rnd${YELLOW}\t\tReturn a random string ${GREY}(Usage: rnd <int>)"
-echo -e " ${GREY}* ${CYAN}tb${YELLOW}\t\tUpload a text files contents to termbin ${GREY}(Usage: cat file.txt | tb)"
-echo -e " ${GREY}* ${CYAN}transfer${YELLOW}\tUpload a file to transfer.sh ${GREY}(Usage: transfer file.tar)\n"
diff --git a/acidbox/.scripts/contact b/acidbox/.scripts/contact
@@ -1,12 +0,0 @@
-#! /bin/sh
-BLUE='\033[1;34m'
-CYAN='\033[0;36m'
-GREY='\033[1;30m'
-RESET='\033[0m'
-YELLOW='\033[0;33m'
-echo -e "\n[${BLUE}CONTACT${RESET}]"
-echo -e " ${GREY}* ${CYAN}E-Mail${YELLOW}\tacid.vegas@acid.vegas"
-echo -e " ${GREY}* ${CYAN}Github${YELLOW}\thttps://github.com/acidvegas"
-echo -e " ${GREY}* ${CYAN}IRC${YELLOW}\t\tirc.supernets.org #acidbox"
-echo -e " ${GREY}* ${CYAN}Keybase${YELLOW}\thttps://keybase.io/acidvegas"
-echo -e " ${GREY}* ${CYAN}Twitter${YELLOW}\thttps://twitter.com/acidvegas\n"
diff --git a/acidbox/.scripts/rules b/acidbox/.scripts/rules
@@ -1,11 +0,0 @@
-#! /bin/sh
-BLUE='\033[1;34m'
-CYAN='\033[0;36m'
-GREY='\033[1;30m'
-RESET='\033[0m'
-YELLOW='\033[0;33m'
-echo -e "\n[${BLUE}RULES${RESET}]"
-echo -e " ${GREY}*${YELLOW} This is a private system that you are not to give out access to anyone"
-echo -e "   without permission from the system admin. No illegal files or activites."
-echo -e " ${GREY}*${YELLOW} Avoid denial of service attacks out of respect for other users on the system."
-echo -e " ${GREY}*${YELLOW} Stay in your home directory, keep the system clean, and make regular backups.\n"
diff --git a/acidbox/.scripts/vhosts b/acidbox/.scripts/vhosts
@@ -1,12 +0,0 @@
-#! /bin/sh
-BLUE='\033[1;34m'
-CYAN='\033[0;36m'
-GREY='\033[1;30m'
-RESET='\033[0m'
-YELLOW='\033[0;33m'
-echo -e "\n[${BLUE}VIRTUAL HOSTS${RESET}]"
-echo -e " ${GREY}* ${CYAN}ip address 1 ${YELLOW}\tvirtual.hostname1.com"
-echo -e " ${GREY}* ${CYAN}ip address 2 ${YELLOW}\tvirtual.hostname2.com"
-echo -e " ${GREY}* ${CYAN}ip address 3 ${YELLOW}\tvirtual.hostname3.com"
-echo -e " ${GREY}* ${CYAN}ip address 4 ${YELLOW}\tvirtual.hostname4.com"
-echo -e " ${GREY}* ${CYAN}ip address 5 ${YELLOW}\tvirtual.hostname5.com\n"
diff --git a/acidbox/setup b/acidbox/setup
@@ -1,47 +0,0 @@
-#!/bin/sh
-set -e
-
-setup_motd() {
-	RESET='\033[0m'
-	GREEN='\033[0;32m'
-	BGREEN='\033[1;32m'
-	YELLOW='\033[0;33m'
-	CYAN='\033[0;36m'
-	GREY='\033[1;30m'
-	RED='\033[1;31m'
-	BLUE='\033[1;34m'
-	UBLUE='\033[4;34m'
-	echo -e "╔═══════════════════════╦══════════════════════════════════════════════════════════════╗"
-	echo -e "║${GREEN}  ▄▄▄·  ▄▄· ▪  ·▄▄▄▄   ${RESET}║                    ${RED}Connection Notice${RESET}                         ║"
-	echo -e "║${GREEN} ▐█ ▀█ ▐█ ▌▪██ ██▪ ██  ${RESET}╟──────────────────────────────────────────────────────────────╢" 
-	echo -e "║${GREEN} ▄█▀▀█ ██ ▄▄▐█·▐█· ▐█▌ ${RESET}║                                                              ║" 
-	echo -e "║${GREEN} ▐█ ▪▐▌▐███▌▐█▌██. ██  ${RESET}║ ${YELLOW}This system is for the use of authorized users only.${RESET}         ║" 
-	echo -e "║${GREEN}  ▀  ▀ ·▀▀▀ ▀▀▀▀▀▀▀▀•  ${RESET}║ ${YELLOW}All connections will be monitored and logged by the system.${RESET}  ║" 
-	echo -e "║${GREEN} ▄▄▄▄·       ▐▄• ▄     ${RESET}║                                                              ║" 
-	echo -e "║${GREEN} ▐█ ▀█▪▪      █▌█▌▪    ${RESET}║ ${YELLOW}Connection issues? Contact ${UBLUE}${BLUE}acid.vegas@acid.vegas${YELLOW} for help.${RESET}   ║" 
-	echo -e "║${GREEN} ▐█▀▀█▄ ▄█▀▄  ·██·     ${RESET}║                                                              ║" 
-	echo -e "║${GREEN} ██▄▪▐█▐█▌.▐▌▪▐█·█▌    ${RESET}║ ${YELLOW}Right about now, the funk soul brudda. Check it out now...${RESET}   ║" 
-	echo -e "║${GREEN} ·▀▀▀▀  ▀█▄▀▪•▀▀ ▀▀    ${RESET}║                                                              ║" 
-	echo -e "╚═══════════════════════╩══════════════════════════════════════════════════════════════╝" 
-	echo "${YELLOW}Hello ${CYAN}$(whoami)${YELLOW}! You are now connected to ${RED}$(hostname)" 
-	echo "${YELLOW}Type ${BGREEN}cmds${YELLOW} to see a list of commands available.${RESET}" 
-	echo "[${BLUE}RULES${RESET}]" 
-	echo " ${GREY}*${YELLOW} This is a private system that you are not to give out access to anyone" 
-	echo "   without permission from the system admin. No illegal files or activites." 
-	echo " ${GREY}*${YELLOW} Avoid denial of service attacks out of respect for other users on the system." 
-	echo " ${GREY}*${YELLOW} Stay in your home directory, keep the system clean, and make regular backups."  
-}
-
-setup_user() {
-	sudo useradd -m -s /bin/bash $1
-	mkdir /home/$1/.scripts
-	wget -O /home/$1/.bashrc             https://git.supernets.org/acidvegas/acidbox/blob/master/files/.bashrc
-	wget -O /home/$1/.scripts/cmds       https://git.supernets.org/acidvegas/acidbox/blob/master/files/cmds
-	wget -O /home/$1/.scripts/contact    https://git.supernets.org/acidvegas/acidbox/blob/master/files/contact
-	wget -O /home/$1/.scripts/rules      https://git.supernets.org/acidvegas/acidbox/blob/master/files/rules
-	wget -O /home/$1/.scripts/vhosts     https://git.supernets.org/acidvegas/acidbox/blob/master/files/vhosts
-	echo "clear && reset/home/$1/.bash_logout"
-	echo "[[ -f ~/.bashrc ]] && . ~/.bashrc" > /home/$1/.bash_profile
-}
-
-setup_motd
-\ No newline at end of file
diff --git a/networking/ampscan.py b/ampscan.py
diff --git a/bandcamp.py b/bandcamp.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+# developed by acidvegas in python (https://acid.vegas/random)
 import re,sys,urllib.request
 if len(sys.argv)!=2:raise SystemExit('error: invalid arguments')
 source=urllib.request.urlopen(f'https://{sys.argv[1]}.bandcamp.com/music').read().decode('utf-8')
diff --git a/btkb.sh b/btkb.sh
@@ -1,12 +0,0 @@
-#!/bin/sh
-pacman -S bluez bluez-utils
-systemctl enable bluetooth && sudo systemctl start bluetooth
-sed -i 's/#AutoEnable=false/AutoEnable=true/' /etc/bluetooth/main.conf
-bluetoothctl power on # possible bluetoothctl -- <cmd>
-bluetoothctl agent KeyboardOnly
-bluetoothctl pairable on
-bluetoothctl scan on
-bluetoothctl pair CC:C5:0A:20:91:5B
-bluetoothctl trust CC:C5:0A:20:91:5B
-bluetoothctl connect CC:C5:0A:20:91:5B
-bluetoothctl scan off
-\ No newline at end of file
diff --git a/clitter.py b/clitter.py
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-# CLI Twitter - Developed by acidvegas in Python (https://acid.vegas/random)
-
-'''
-Requirements:
-	Tweepy (http://pypi.python.org/pypi/tweepy)
-
-Todo:
-	Fuck tweepy, convert this shit to pure python, no 3rd party libs. Oh wait I hardly ever use Twatter...
-'''
-
-import sys
-
-consumer_key        = 'CHANGEME'
-consumer_secret     = 'CHANGEME'
-access_token        = 'CHANGEME'
-access_token_secret = 'CHANGEME'
-
-if len(sys.argv) < 2:
-	raise SystemExit('[!] - Missing command line arguments! (Usage: clitter.py <tweet>)')
-else:
-	tweet = ' '.join(sys.argv[1:])
-try:
-	import tweepy
-except ImportError:
-	raise SystemExit('[!] - Failed to import the Tweepy library! (http://pypi.python.org/pypi/tweepy)')
-try:
-	auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
-	auth.set_access_token(access_token, access_token_secret)
-	api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
-	if not api.verify_credentials():
-		raise tweepy.TweepError
-except tweepy.TweepError as ex:
-	raise SystemExit(f'[!] - Failed to login to Twitter! ({ex})')
-else:
-	me = api.me()
-if len(tweet) > 280:
-	raise SystemExit('[!] - Tweet is too long!')
-else:
-	try:
-		api.update_status(tweet)
-		tweet = api.user_timeline(id=me.id, count=1)[0]
-		print(f'[+] - Tweet has been posted! (https://twitter.com/{me.screen_name}/status/{tweet.id})')
-	except tweepy.TweepError as ex:
-		raise SystemExit(f'Failed to post Tweet! ({ex})')
-\ No newline at end of file
diff --git a/cmus-now b/cmus-now
@@ -1,4 +0,0 @@
-#!/bin/sh
-artist=`cmus-remote -Q | grep --text '^tag artist' | sed '/^tag artistsort/d' | awk '{gsub("tag artist ", "");print}'`
-title=`cmus-remote  -Q | grep --text '^tag title'  | sed -e 's/tag title //'  | awk '{gsub("tag title ",  "");print}'`
-notify-send "♫ $artist - $title"
-\ No newline at end of file
diff --git a/coingecko.py b/coingecko.py
@@ -1,60 +0,0 @@
-#!/usr/bin/env python
-# CoinGecko API Class - Developed by acidvegas in Python (https://acid.vegas/coinmarketcap)
-
-'''
-API Reference: https://www.coingecko.com/en/api#explore-api
-'''
-
-import http.client
-import json
-import time
-
-class CoinGecko():
-	def __init__(self):
-		self.cache = dict()
-		self.last  = 0
-
-	def api(self, endpoint):
-		conn = http.client.HTTPSConnection('api.coingecko.com', timeout=15)
-		conn.request('GET', '/api/v3/' + endpoint, headers={'Accept':'application/json',})
-		response = conn.getresponse().read().decode('utf-8')
-		conn.close()
-		return json.loads(response)
-
-	def market(self):
-		if time.time() - self.last > 300:
-			page = 1
-			while True:
-				data = self.api('coins/markets?vs_currency=usd&order=market_cap_desc&per_page=250&page=' + str(page) + '&sparkline=true&price_change_percentage=1h%2C24h%2C7d%2C30d%2C1y')
-				if not data:
-					break
-				for coin in data:
-					self.cache[coin['symbol']] = {
-						'name'       : coin['name'],
-						'price'      : coin['current_price'],
-						'market_cap' : coin['market_cap'],
-						'rank'       : coin['market_cap_rank'],
-						'volume'     : coin['total_volume'],
-						'change'     : {
-							'1h' : coin['price_change_percentage_1h_in_currency'],
-							'1d' : coin['price_change_percentage_24h_in_currency'],
-							'1w' : coin['price_change_percentage_7d_in_currency'],
-							'1m' : coin['price_change_percentage_30d_in_currency'],
-							'1y' : coin['price_change_percentage_1h_in_currency']
-						}
-					}
-				page += 1
-			self.last = time.time()
-		return self.cache
-
-	def trending(self):
-		return [coin['item']['symbol'] for coin in self.api('search/trending')['coins']]
-
-	def global_(self):
-		data = self.api('global')['data']
-		results = {
-			'cryptocurrencies' : data['active_cryptocurrencies']
-			'markets'          : data['markets']
-			'btc_dominance'    : data['market_cap_percentage']['btc']
-		}
-		return results
-\ No newline at end of file
diff --git a/networking/ddosmonit.sh b/ddosmonit
diff --git a/gmail.py b/gmail.py
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-import smtplib,sys
-with smtplib.SMTP_SSL('smtp.gmail.com',465) as server:
-	server.login('username@gmail.com','password')
-	server.sendmail('username@gmail.com','target@mail.com',' '.join(sys.argv[1:]))
-\ No newline at end of file
diff --git a/irc/bots/badparent.py b/irc/bots/badparent.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# BadParent IRC Bot - Developed by acidvegas in Python (https://acid.vegas/trollbots)
+# BadParent IRC Bot - Developed by acidvegas in Python (https://acid.vegas/random)
 # badparent.py
 
 '''
diff --git a/irc/bots/cancer.py b/irc/bots/cancer.py
@@ -1,500 +0,0 @@
-#!/usr/bin/env python
-# Cancer IRC Bot - Developed by acidvegas in Python (https://acid.vegas/random)
-
-'''
-WARNING: This bot highly encourages flooding!
-
-Commands:
-	@cancer       | Information about the bot.
-	@cancer stats | Return bot statistics for the channel
-	!100          | 1 in 100 chance to get a 100 (big !smoke)
-	!beer [nick]  | Grab a beer or toss one to someone.
-	!chainsmoke   | Start a game of Chain Smoke
-	!chug         | Sip beer
-	!dragrace     | Start a game of Drag Race
-	!extendo      | 1 in 100 chance to get an EXTENDO (big !toke)
-	!fatfuck      | 1 in 100 chance to get a  FATFUCK (fat !smoke/!toke)
-	!letschug     | LET'S FUCKING CHUG!
-	!letstoke     | LET'S FUCKING TOKE!
-	!toke         | Hit joint
-	!smoke        | Hit cigarette
-'''
-
-import os
-import random
-import socket
-import threading
-import time
-
-# Connection
-server     = 'irc.server.com'
-port       = 6697
-use_ipv6   = False
-use_ssl    = True
-ssl_verify = False
-vhost      = None
-channel    = '#chats'
-key        = None
-
-# Certificate
-cert_key  = None
-cert_file = None
-cert_pass = None
-
-# Identity
-nickname = 'CANCER'
-username = 'smokesome' # vHost can be CIG@ARETTE or C@NCER for vanity purposes
-realname = 'acid.vegas/random'
-
-# Login
-nickserv_password = None
-network_password  = None
-operator_password = None
-
-# Settings
-user_modes = None
-
-# Globals (DO NOT EDIT)
-stat_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'stats.log')
-
-# 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 debug(msg):
-	print(f'{get_time()} | [~] - {msg}')
-
-def error(msg, reason=None):
-	print(f'{get_time()} | [!] - {msg} ({reason})') if reason else print(f'{get_time()} | [!] - {msg}')
-
-def get_time():
-	return time.strftime('%I:%M:%S')
-
-def luck(odds):
-	return True if random.randint(1,odds) == 1 else False
-
-def stats(stat_type, stat_action):
-	option = {'chug':0,'smoke':1,'toke':2}
-	if stat_action == 'add':
-		stats = [int(stat) for stat in open(stat_file).read().split().split(':')]
-		with open(stat_file, 'w') as stats_file:
-			stats[option[stat_type]]+=1
-			stats_file.write(':'.join([str(stat) for stat in stats]))
-	elif stat_action == 'get':
-		return int(open(stat_file).read().split(':')[option[stat_type]])
-
-class IRC(object):
-	def __init__(self):
-		self.chain_smoked    = 0
-		self.drag_race_start = 0
-		self.fat             = False
-		self.event           = None
-		self.nicks           = list()
-		self.sock            = None
-		self.stats           = {'chugged':0,'hits':25,'sips':8,'smoked':0,'toked':0}
-		self.status          = True
-
-	def run(self):
-		threading.Thread(target=Games.loop).start()
-		self.connect()
-
-	def connect(self):
-		try:
-			self.create_socket()
-			self.sock.connect((server, port))
-			self.register()
-		except socket.error as ex:
-			error('Failed to connect to IRC server.', ex)
-			Events.disconnect()
-		else:
-			self.listen()
-
-	def create_socket(self):
-		self.sock = socket.socket(socket.AF_INET6) if use_ipv6 else socket.socket()
-		if vhost:
-			self.sock.bind((vhost, 0))
-		if use_ssl:
-			ctx = ssl.SSLContext()
-			if cert_file:
-				ctx.load_cert_chain(cert_file, cert_key, cert_pass)
-			if ssl_verify:
-				ctx.verify_mode = ssl.CERT_REQUIRED
-				ctx.load_default_certs()
-			else:
-				ctx.check_hostname = False
-				ctx.verify_mode = ssl.CERT_NONE
-			self.sock = ctx.wrap_socket(self.sock)
-
-	def listen(self):
-		while True:
-			try:
-				data = self.sock.recv(1024).decode('utf-8')
-				for line in (line for line in data.split('\r\n') if len(line.split()) >= 2):
-					debug(line)
-					Events.handle(line)
-			except (UnicodeDecodeError,UnicodeEncodeError):
-				pass
-			except Exception as ex:
-				error('Unexpected error occured.', ex)
-				break
-		Events.disconnect()
-
-	def register(self):
-		if network_password:
-			Commands.raw('PASS ' + network_password)
-		Commands.raw(f'USER {username} 0 * :{realname}')
-		Commands.raw('NICK ' + nickname)
-
-class Commands:
-	def action(chan, msg):
-		Commands.sendmsg(chan, f'\x01ACTION {msg}\x01')
-
-	def join_channel(chan, key=None):
-		Commands.raw(f'JOIN {chan} {key}') if key else Commands.raw('JOIN ' + chan)
-
-	def kill(nick, reason):
-		Commands.raw(f'KILL {nick} {reason}')
-
-	def notice(target, msg):
-		Commands.raw(f'NOTICE {target} :{msg}')
-
-	def raw(msg):
-		Bot.sock.send(bytes(msg + '\r\n', 'utf-8'))
-
-	def sendmsg(target, msg):
-		Commands.raw(f'PRIVMSG {target} :{msg}')
-
-class Events:
-	def connect():
-		if user_modes:
-			Commands.raw(f'MODE {nickname} +{user_modes}')
-		if nickserv_password:
-			Commands.sendmsg('NickServ', f'IDENTIFY {nickname} {nickserv_password}')
-		if operator_password:
-			Commands.raw(f'OPER {username} {operator_password}')
-		Commands.join_channel(channel, key)
-
-	def disconnect():
-		Bot.chain_smoked    = 0
-		Bot.drag_race_start = 0
-		Bot.event           = None
-		Bot.nicks           = list()
-		Bot.status          = True
-		Bot.sock.close()
-		time.sleep(10)
-		Bot.connect()
-
-	def message(nick, chan, msg):
-		if Bot.status:
-			args = msg.split()
-			if msg == '@cancer':
-				Commands.sendmsg(chan, bold + 'CANCER IRC Bot - Developed by acidvegas in Python - https://acid.vegas/random')
-			elif msg == '@cancer stats':
-				Commands.sendmsg(chan, 'Chugged : {0} beers      {1}'.format(color('{:,}'.format(stats('chug','get')*24), light_blue), color('({:,} cases)'.format(stats('chug','get')), grey)))
-				Commands.sendmsg(chan, 'Smoked  : {0} cigarettes {1}'.format(color('{:,}'.format(stats('smoke','get')*20), light_blue), color('({:,} packs)'.format(stats('smoke','get')), grey)))
-				Commands.sendmsg(chan, 'Toked   : {0} joints     {1}'.format(color('{:,}'.format(stats('toke','get')*3), light_blue), color('({:,} grams)'.format(stats('toke','get')), grey)))
-			elif msg in ('!100','!extendo') and luck(100):
-				Bot.stats['hits'] = 100
-				if msg == '!100':
-					Commands.sendmsg(chan, '{0}{1}{2}'.format(color(' !!! ', white, red), color('AWWW SHIT, IT\'S TIME FOR THAT NEWPORT 100', red, white), color(' !!! ', white, red)))
-				else:
-					Commands.sendmsg(chan, '{0}{1}{2}'.format(color(' !!! ', red, green), color('OHHH FUCK, IT\'S TIME FOR THAT 420 EXTENDO', yellow, green), color(' !!! ', red, green)))
-			elif args[0] == '!beer':
-				if len(args) == 1:
-					target = nick
-				elif len(args) == 2:
-					target = args[1]
-				beer = '{0}{1}{2}'.format(color(' ', white, white), color(' BUD ', white, random.choice((blue,brown))), color('c', grey, white))
-				Commands.action(chan, f'throws {color(target, white)} an ice cold {beer} =)')
-			elif msg == '!chainsmoke' and not Bot.event:
-				threading.Thread(target=Games.chain_smoke, args=(chan,)).start()
-			elif msg == '!chug':
-				if Bot.event == 'letschug':
-					if nick in Bot.nicks:
-						Commands.sendmsg(chan, color(nick + ' you are already chuggin u wastoid!', light_green))
-					else:
-						Bot.nicks.append(nick)
-						Commands.sendmsg(chan, color(nick + ' joined the CHUG session!', light_green))
-				else:
-					if Bot.stats['sips'] <= 0:
-						Bot.stats['sips'] = 8
-						Bot.stats['chugged'] += 1
-						if Bot.stats['chugged'] == 24:
-							stats('chug','add')
-							Bot.stats['chugged'] = 0
-					for line in Generate.mug(Bot.stats['sips']):
-						Commands.sendmsg(chan, line)
-					Bot.stats['sips'] -= random.choice((1,2))
-			elif msg == '!dragrace' and not Bot.event:
-				threading.Thread(target=Games.drag_race).start()
-			elif msg == '!fatfuck' and luck(100):
-				Bot.fat = True
-				Commands.sendmsg(chan, '{0}{1}{2}'.format(color(' !!! ', red, green), color('AWWW SHIT, IT\'S TIME FOR THAT MARLBORO FATFUCK', black, green), color(' !!! ', red, green)))
-			elif msg == '!letschug' and not Bot.event:
-				threading.Thread(target=Games.chug, args=(nick,chan)).start()
-			elif msg == '!letstoke' and not Bot.event:
-				threading.Thread(target=Games.toke, args=(nick,chan)).start()
-			elif msg in ('!smoke','!toke'):
-				option = 'smoked' if msg == '!smoke' else 'toked'
-				if msg == '!toke' and Bot.event == 'letstoke':
-					if nick in Bot.nicks:
-						Commands.sendmsg(chan, color(nick + ' you are already toking u stoner!', light_green))
-					else:
-						Bot.nicks.append(nick)
-						Commands.sendmsg(chan, color(nick + ' joined the TOKE session!', light_green))
-				else:
-					if Bot.stats['hits'] <= 0:
-						Bot.stats['hits'] = 25
-						Bot.stats[option] += 1
-						if Bot.fat:
-							Bot.fat = False
-						if Bot.stats[option] == 20:
-							stats(option[:-1],'add')
-							Bot.stats[option] = 0
-						if Bot.event == 'chainsmoke' and msg == '!smoke':
-							Bot.nicks[nick] = Bot.nicks[nick]+1 if nick in Bot.nicks else 1
-							Bot.chain_smoked += 1
-						elif Bot.event == 'dragrace' and msg == '!smoke':
-							Commands.sendmsg(chan, 'It took {0} seconds for {1} to smoke a cigarette!'.format(color('{:.2f}'.format(time.time()-Bot.drag_race_start), light_blue), color(chan, white)))
-							Bot.event = None
-							Bot.drag_race_start = 0
-						elif luck(25):
-							Commands.kill(nick, f'CANCER KILLED {nick.upper()} - QUIT SMOKING TODAY! +1 800-QUIT-NOW')
-					else:
-						object = Generate.cigarette(Bot.stats['hits']) if msg == '!smoke' else Generate.joint(Bot.stats['hits'])
-						cigarette = Generate.cigarette(Bot.stats['hits'])
-						if Bot.fat:
-							Commands.sendmsg(chan, object)
-							Commands.sendmsg(chan, object)
-							Commands.sendmsg(chan, object)
-						else:
-							Commands.sendmsg(chan, object)
-						Bot.stats['hits'] -= random.choice((1,2))
-
-	def handle(data):
-		args = data.split()
-		if data.startswith('ERROR :Closing Link:'):
-			raise Exception('Connection has closed.')
-		elif args[0] == 'PING':
-			Commands.raw('PONG ' + args[1][1:])
-		elif args[1] == '001':
-			Events.connect()
-		elif args[1] == '433':
-			error('The bot is already running or nick is in use.')
-		elif args[1] == 'INVITE' and len(args) == 4:
-			invited = args[2]
-			chan    = args[3][1:]
-			if invited == nickname and chan == channel:
-				Commands.join_channel(channel, key)
-		elif args[1] == 'KICK' and len(args) >= 4:
-			chan   = args[2]
-			kicked = args[3]
-			if kicked == nickname and chan == channel:
-				time.sleep(3)
-				Commands.join_channel(channel, key)
-		elif args[1] == 'PART' and len(args) >= 3:
-			chan = args[2]
-			if chan == channel:
-				nick = args[0].split('!')[0][1:]
-				Commands.action(nick, f'blows smoke in {nick}\'s face...')
-		elif args[1] == 'PRIVMSG' and len(args) >= 4:
-			nick = args[0].split('!')[0][1:]
-			chan = args[2]
-			msg  = data.split(f'{args[0]} PRIVMSG {chan} :')[1]
-			if chan ==  channel:
-				Events.message(nick, chan, msg)
-
-class Games:
-	def chain_smoke(chan):
-		Bot.event  = 'chainsmoke'
-		Bot.status = False
-		Bot.nicks  = dict()
-		try:
-			Commands.notice(chan, 'Starting a round of {0} in {1} seconds!'.format(color('ChainSmoke', red), color('10', white)))
-			Commands.notice(chan, '[{0}] {1} {2} {3}'.format(color('How To Play', light_blue), color('Type', yellow), color('!smoke', light_green), color('to hit a cigarette. The cigarette goes down a little after each hit. Once you finish a cigarette, a new one will be lit for you. You will have 60 seconds to chain smoke as many cigarettes as possible.', yellow)))
-			time.sleep(10)
-			Commands.action(chan, 'Round starts in 3...')
-			time.sleep(1)
-			Commands.action(chan, '2...')
-			time.sleep(1)
-			Commands.action(chan, '1...')
-			time.sleep(1)
-			Commands.action(chan, color('GO', light_green))
-			Bot.status = True
-			time.sleep(60)
-			Bot.status = False
-			Commands.sendmsg(chan, color('          CHAINSMOKE ROUND IS OVER          ', red, yellow))
-			time.sleep(1)
-			Commands.sendmsg(chan, color('          CHAINSMOKE ROUND IS OVER          ', red, yellow))
-			time.sleep(1)
-			Commands.sendmsg(chan, color('          CHAINSMOKE ROUND IS OVER          ', red, yellow))
-			Commands.sendmsg(chan, color('Counting cigarette butts...', yellow))
-			time.sleep(10)
-			Commands.sendmsg(chan, '{0} smoked {1} cigarettes!'.format(chan, color(str(Bot.chain_smoked), light_blue)))
-			if Bot.nicks:
-				guy = max(Bot.nicks, key=Bot.nicks.get)
-				Commands.sendmsg(chan, '{0} smoked the most cigarettes... {1}'.format(guy, Bot.nicks[guy]))
-		except Exception as ex:
-			error('Error occured in chain smoke event!', ex)
-		finally:
-			Bot.chain_smoked  = 0
-			Bot.nicks  = list()
-			Bot.event  = None
-			Bot.status = True
-
-	def chug(nick, chan):
-		Bot.event = 'letschug'
-		Bot.nicks.append(nick)
-		try:
-			Commands.sendmsg(chan, color(f'OH SHIT {nick} is drunk', light_green))
-			Commands.notice(chan, color(f'Time to TOTALLY CHUG in {chan.upper()} in 30 seconds, type !chug to join', light_green))
-			time.sleep(10)
-			Commands.sendmsg(chan, color('LOL we CHUG in 20 get ready ' + ' '.join(Bot.nicks), light_green))
-			time.sleep(10)
-			Commands.sendmsg(chan, color('YO we CHUG in 10 get ready ' + ' '.join(Bot.nicks), light_green))
-			time.sleep(5)
-			Commands.sendmsg(chan, color('alright CHUG in 5', light_green))
-			time.sleep(1)
-			Commands.sendmsg(chan, color('4..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(chan, color('3..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(chan, color('2..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(chan, color('1..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(chan, color(' '.join(Bot.nicks) + ' .. CHUG!', light_green))
-		except Exception as ex:
-			error('Error occured in chug event!', ex)
-		finally:
-			Bot.event = None
-			Bot.nicks = list()
-
-	def drag_race():
-		Bot.event  = 'dragrace'
-		Bot.status = False
-		Bot.hits   = 25
-		try:
-			Commands.notice(channel, 'Starting a round of {0} in {1} seconds!'.format(color('DragRace', red), color('10', white)))
-			Commands.notice(channel, '[{0}] {1} {2} {3}'.format(color('How To Play', light_blue), color('Type', yellow), color('!smoke', light_green), color('to hit a cigarette. The cigarette goes down a little after each hit. You will have 10 seconds to smoke as quickly as possible.', yellow)))
-			time.sleep(10)
-			Commands.action(channel, 'Round starts in 3...')
-			time.sleep(1)
-			Commands.action(channel, '2...')
-			time.sleep(1)
-			Commands.action(channel, '1...')
-			time.sleep(1)
-			Commands.action(channel, color('GO', light_green))
-			Bot.drag_race_start = time.time()
-		except Exception as ex:
-			error('Error occured in the drag race event!', ex)
-		finally:
-			Bot.status = True
-
-	def loop():
-		while True:
-			if get_time()[:-3] == '04:20':
-				try:
-					Commands.sendmsg(channel, color('S M O K E W E E D E R R D A Y', light_green))
-					Commands.sendmsg(channel, color('ITZ DAT MUTHA FUCKN 420 BITCH', yellow))
-					Commands.sendmsg(channel, color('LIGHT UP A NICE GOOD FAT FUCK', red))
-					time.sleep(43000)
-				except Exeption as ex:
-					error('Error occured in loop!', ex)
-			else:
-				time.sleep(30)
-
-	def toke(nick, chan):
-		Bot.event = 'letstoke'
-		Bot.nicks.append(nick)
-		try:
-			Commands.sendmsg(channel, color(f'YO {nick} is high', light_green))
-			Commands.notice(channel, color(f'Time to FUCKING toke in {chan.upper()}, type !toke to join', light_green))
-			time.sleep(10)
-			Commands.sendmsg(channel, color('OH SHIT we toke in 20 get ready ' + ' '.join(Bot.nicks), light_green))
-			time.sleep(10)
-			Commands.sendmsg(channel, color('OH SHIT we toke in 10 get ready ' + ' '.join(Bot.nicks), light_green))
-			time.sleep(5)
-			Commands.sendmsg(channel, color('alright toke in 5', light_green))
-			time.sleep(1)
-			Commands.sendmsg(channel, color('4..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(channel, color('3..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(channel, color('2..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(channel, color('1..', light_green))
-			time.sleep(1)
-			Commands.sendmsg(channel, color(' '.join(Bot.nicks) + ' .. toke!', light_green))
-		except Exception as ex:
-			error('Error occured in toke event!', ex)
-		finally:
-			Bot.event = None
-			Bot.nicks = list()
-
-class Generate:
-	def beer():
-		glass = color(' ', light_grey, light_grey)
-		return glass + color(''.join(random.choice(('       :.')) for _ in range(9)), orange, yellow) + glass
-
-	def cigarette(size):
-		filter    = color(';.`-,:.`;', yellow, orange)
-		cigarette = color('|'*size, light_grey, white)
-		cherry_a  = color(random.choice(('@#&')), random.choice((red,yellow)), grey)
-		cherry_b  = color(random.choice(('@#&')), random.choice((red,yellow)), grey)
-		smoke     = color('-' + ''.join(random.choice((';:-.,_`~\'')) for _ in range(random.randint(5,8))), grey)
-		return filter + cigarette + cherry_a + cherry_b + smoke
-
-	def joint(size):
-		joint    = color('/'*size, light_grey, white)
-		cherry_a = color(random.choice(('@#&')), random.choice((green,red,yellow)), grey)
-		cherry_b = color(random.choice(('@#&')), random.choice((green,red,yellow)), grey)
-		smoke    = color('-' + ''.join(random.choice((';:-.,_`~\'')) for _ in range(random.randint(5,8))), grey)
-		return joint + cherry_a + cherry_b + smoke
-
-	def mug(size):
-		glass  = color(' ', light_grey, light_grey)
-		empty  = f'{glass}         {glass}'
-		foam   = glass + color(':::::::::', light_grey, white) + glass
-		bottom = color('           ', light_grey, light_grey)
-		mug   = [foam,Generate.beer(),Generate.beer(),Generate.beer(),Generate.beer(),Generate.beer(),Generate.beer(),Generate.beer()]
-		for i in range(8-size):
-			mug.pop()
-			mug.insert(0, empty)
-		for i in range(len(mug)):
-			if i == 2 or i == 7:
-				mug[i] += glass + glass
-			elif i > 2 and i < 7:
-				mug[i] += '  ' + glass
-		mug.append(bottom)
-		return mug
-
-# Main
-if use_ssl:
-	import ssl
-if not os.path.isfile(stat_file):
-	open(stat_file, 'w').write('0:0:0')
-Bot = IRC()
-Bot.run()
diff --git a/irc/bots/jupiter.py b/irc/bots/jupiter.py
@@ -1,309 +0,0 @@
-#!/usr/bin/env python
-# Jupiter IRC Botnet - Developed by acidvegas in Python (https://acid.vegas/jupiter)
-
-'''
-Jupiter will create a botnet by connecting a defined number of clones to every EFMet server.
-A single host could potentially create over 30 clones.
-It is meant to monitor/jupe/hold nicks & be controlled to do just about anything.
-The bot is designed to be very minimal, secure, & trustless by nature.
-This means anyone can run a copy of your script on their server to help build your botnet.
-
-Commands
-	id                   | Send bot identity
-	raw     [-d] <data>  | Send \<data> to server. optionally delayed with -d argument
-	monitor list         | Return MONITOR list
-	monitor reset        | Reset MONITOR list
-	monitor <+/-><nicks> | Add (+) or Remove (-) <nicks> from MONITOR list. (Can be a single nick or comma seperated list)
-
-All commands must be prefixed with @all or the bots nick & will work in a channel or private message.
-Raw data must be IRC RFC compliant data & any nicks in the MONITOR list will be juped as soon as they become available.
-
-It is highly recommended that you use a random spoofing ident protocol daemon:
-	https://github.com/acidvegas/random/blob/master/irc/identd.py
-'''
-
-import random
-import re
-import socket
-import ssl
-import time
-import threading
-
-# Connection
-servers = (
-	'efnet.deic.eu',         # IPv6
-	'efnet.port80.se',       # IPv6
-	'efnet.portlane.se',     # IPv6
-	'irc.choopa.net',        # IPv6
-	'irc.colosolutions.net',
-	'irc.du.se',
-	'irc.efnet.fr',          # IPv6
-	'irc.efnet.nl',          # IPv6 +6669
-	'irc.homelien.no',       # IPv6
-	'irc.mzima.net',         # IPv6 +6697
-	'irc.nordunet.se',       # IPv6
-	'irc.prison.net',
-	'irc.underworld.no',     # IPv6
-	'irc.servercentral.net'  # +9999
-)
-ipv6    = False
-vhosts  = None # Use (line.rstrip() for line in open('vhosts.txt','r').readlines() if line) for reading from a file.
-channel = '#jupiter'
-key     = None
-
-# Settings
-admin           = 'nick!user@host' # Can use wildcards (Must be in nick!user@host format)
-concurrency     = 3                # Number of clones to load per server
-id              = 'TEST'           # Unique ID so you can tell which bots belong what server
-
-# Formatting Control Characters / Color Codes
-bold        = '\x02'
-reset       = '\x0f'
-green       = '03'
-red         = '04'
-purple      = '06'
-orange      = '07'
-yellow      = '08'
-light_green = '09'
-cyan        = '10'
-light_cyan  = '11'
-light_blue  = '12'
-pink        = '13'
-grey        = '14'
-
-# Globals
-bots = list()
-
-def botlist(nick):
-	global bots
-	if nick[:1] == '+':
-		bots.append(nick[1:])
-	elif nick[:1] == '-':
-		bots.remove(nick[1:])
-
-def color(msg, foreground, background=None):
-	return f'\x03{foreground},{background}{msg}{reset}' if background else f'\x03{foreground}{msg}{reset}'
-
-def debug(msg):
-	print(f'{get_time()} | [~] - {msg}')
-
-def error(msg, reason=None):
-	print(f'{get_time()} | [!] - {msg} ({reason})') if reason else print(f'{get_time()} | [!] - {msg}')
-
-def get_time():
-	return time.strftime('%I:%M:%S')
-
-def is_admin(ident):
-	return re.compile(admin.replace('*','.*')).search(ident)
-
-def random_nick():
-	prefix = random.choice(['st','sn','cr','pl','pr','qu','br','gr','sh','sk','kl','wr']+list('bcdfgklmnprstvwz'))
-	midfix = random.choice(('aeiou'))+random.choice(('aeiou'))+random.choice(('bcdfgklmnprstvwz'))
-	suffix = random.choice(['ed','est','er','le','ly','y','ies','iest','ian','ion','est','ing','led']+list('abcdfgklmnprstvwz'))
-	return prefix+midfix+suffix
-
-class clone(threading.Thread):
-	def __init__(self, server, vhost):
-		self.monlist  = list()
-		self.nickname = random_nick()
-		self.server   = server
-		self.sock     = None
-		self.vhost    = vhost
-		threading.Thread.__init__(self)
-
-	def run(self):
-		time.sleep(random.randint(300,900))
-		self.connect()
-
-	def connect(self):
-		try:
-			self.create_socket()
-			self.sock.connect((server, 6667))
-			self.raw(f'USER {random_nick()} 0 * :{random_nick()}')
-			self.nick(self.nickname)
-		except socket.error as ex:
-			error('Failed to connect to IRC server.', ex)
-			self.event_disconnect()
-		else:
-			self.listen()
-
-	def create_socket(self):
-		ipv6_check = set([ip[4][0] for ip in socket.getaddrinfo(server,6667) if ':' in ip[4][0]])
-		self.sock  = socket.socket(socket.AF_INET6) if ipv6 and ipv6_check else socket.socket()
-		if self.vhost:
-			self.sock.bind((self.vhost,0))
-		#self.sock = ssl.wrap_socket(self.sock)
-
-	def event_connect(self):
-		if self.nickname not in bots:
-			botlist('+'+self.nickname)
-		if self.monlist:
-			self.monitor('+', self.monlist)
-		self.join_channel(channel, key)
-
-	def event_ctcp(self, nick, target, msg):
-		if target == self.nickname:
-			self.sendmsg(channel, '[{0}] {1}{2}{3} {4}'.format(color('CTCP', green), color('<', grey), color(nick, yellow), color('>', grey), msg))
-
-	def event_disconnect(self):
-		if self.nickname in bots:
-			botlist('-'+self.nickname)
-		self.sock.close()
-		time.sleep(86400+random.randint(1800,3600))
-		self.connect()
-
-	def event_nick(self, nick, new_nick):
-		if nick == self.nickname:
-			self.nickname = new_nick
-			if new_nick in self.monlist:
-				self.monitor('C')
-				self.monlist = list()
-		elif nick in self.monlist:
-			self.nick(nick)
-
-	def event_nick_in_use(self, nick, target_nick):
-		if nick == '*':
-			self.nickname = random_nick()
-			self.nick(self.nickname)
-
-	def event_notice(self, nick, target, msg):
-		if target == self.nickname:
-			self.sendmsg(channel, '[{0}] {1}{2}{3} {4}'.format(color('NOTICE', purple), color('<', grey), color(nick, yellow), color('>', grey), msg))
-
-	def event_message(self, ident, nick, target, msg):
-		if is_admin(ident):
-			args = msg.split()
-			if args[0] in ('@all',self.nickname) and len(args) >= 2:
-				if len(args) == 2:
-					if args[1] == 'id':
-						self.sendmsg(target, id)
-				elif len(args) == 3 and args[1] == 'monitor':
-					if args[2] == 'list' and self.monlist:
-						self.sendmsg(target, '[{0}] {1}'.format(color('Monitor', light_blue), ', '.join(self.monlist)))
-					elif args[2] == 'reset' and self.monlist:
-						self.monitor('C')
-						self.monlist = list()
-						self.sendmsg(target, '{0} nick(s) have been {1} from the monitor list.'.format(color(str(len(self.monlist)), cyan), color('removed', red)))
-					elif args[2][:1] == '+':
-						nicks = [mon_nick for mon_nick in set(args[2][1:].split(',')) if mon_nick not in self.monlist]
-						if nicks:
-							self.monitor('+', nicks)
-							self.monlist += nicks
-							self.sendmsg(target, '{0} nick(s) have been {1} to the monitor list.'.format(color(str(len(nicks)), cyan), color('added', green)))
-					elif args[2][:1] == '-':
-						nicks = [mon_nick for mon_nick in set(args[2][1:].split(',')) if mon_nick in self.monlist]
-						if nicks:
-							self.monitor('-', nicks)
-							for mon_nick in nicks:
-								self.monlist.remove(mon_nick)
-							self.sendmsg(target, '{0} nick(s) have been {1} from the monitor list.'.format(color(str(len(nicks)), cyan), color('removed', red)))
-				elif len(args) >= 4 and args[1] == 'raw':
-					if args[2] == '-d':
-						data = ' '.join(args[3:])
-						threading.Thread(target=self.raw, args=(data,True)).start()
-					else:
-						data = ' '.join(args[2:])
-						self.raw(data)
-		elif target == self.nickname:
-			if msg.startswith('\x01ACTION'):
-				self.sendmsg(channel, '[{0}] {1}{2}{3} * {4}'.format(color('PM', red), color('<', grey), color(nick, yellow), color('>', grey), msg[8:][:-1]))
-			else:
-				self.sendmsg(channel, '[{0}] {1}{2}{3} {4}'.format(color('PM', red), color('<', grey), color(nick, yellow), color('>', grey), msg))
-
-	def event_mode(self, nick, chan, modes):
-		pass # Don't know what we are doing with this yet.
-
-	def event_quit(self, nick):
-		if nick in self.monlist:
-			self.nick(nick)
-
-	def handle_events(self, data):
-		args = data.split()
-		if data.startswith('ERROR :Closing Link:'):
-			raise Exception('Connection has closed.')
-		elif data.startswith('ERROR :Reconnecting too fast'):
-			raise Exception('Connection has closed. (throttled)')
-		elif args[0] == 'PING':
-			self.raw('PONG ' + args[1][1:])
-		elif args[1] == '001': # RPL_WELCOME
-			self.event_connect()
-		elif args[1] == '433' and len(args) >= 4: # ERR_NICKNAMEINUSE
-			nick = args[2]
-			target_nick = args[3]
-			self.event_nick_in_use(nick, target_nick)
-		elif args[1] == '731' and len(args) >= 4: # RPL_MONOFFLINE
-			nick = args[3][1:]
-			self.nick(nick)
-		elif args[1] == 'MODE' and len(args) >= 4:
-			nick  = args[0].split('!')[0][1:]
-			chan  = args[2]
-			modes = ' '.join(args[:3])
-			self.event_mode(nick, chan, modes)
-		elif args[1] == 'NICK' and len(args) == 3:
-			nick = args[0].split('!')[0][1:]
-			new_nick = args[2][1:]
-			self.event_nick(nick, new_nick)
-		elif args[1] == 'NOTICE':
-			nick   = args[0].split('!')[0][1:]
-			target = args[2]
-			msg    = ' '.join(args[3:])[1:]
-			self.event_notice(nick, target, msg)
-		elif args[1] == 'PRIVMSG' and len(args) >= 4:
-			ident  = args[0][1:]
-			nick   = args[0].split('!')[0][1:]
-			target = args[2]
-			msg    = ' '.join(args[3:])[1:]
-			if msg[:1] == '\001':
-				msg = msg[1:]
-				self.event_ctcp(nick, target, msg)
-			else:
-				self.event_message(ident, nick, target, msg)
-		elif args[1] == 'QUIT':
-			nick = args[0].split('!')[0][1:]
-			self.event_quit(nick)
-
-	def join_channel(self, chan, key=None):
-		self.raw(f'JOIN {chan} {key}') if key else self.raw('JOIN ' + chan)
-
-	def listen(self):
-		while True:
-			try:
-				data = self.sock.recv(1024).decode('utf-8')
-				for line in (line for line in data.split('\r\n') if len(line.split()) >= 2):
-					debug(line)
-					self.handle_events(line)
-			except (UnicodeDecodeError,UnicodeEncodeError):
-				pass
-			except Exception as ex:
-				error('Unexpected error occured.', ex)
-				break
-		self.event_disconnect()
-
-	def mode(self, target, mode):
-		self.raw(f'MODE {target} {mode}')
-
-	def monitor(self, action, nicks=list()):
-		self.raw(f'MONITOR {action} ' + ','.join(nicks))
-
-	def nick(self, nick):
-		self.raw('NICK ' + nick)
-
-	def raw(self, data, delay=False):
-		if delay:
-			time.sleep(random.randint(300,900))
-		self.sock.send(bytes(data + '\r\n', 'utf-8'))
-
-	def sendmsg(self, target, msg):
-		self.raw(f'PRIVMSG {target} :{msg}')
-
-# Main
-if type(vhosts) == list:
-	for vhost in vhosts:
-		for i in range(concurrency):
-			for server in servers:
-				clone(server, vhost).start()
-else:
-	for i in range(concurrency):
-		for server in servers:
-			clone(server, vhosts).start()
-while True:input('')
diff --git a/irc/bots/spiderweb.py b/irc/bots/spiderweb.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+# SpiderWeb IRC Bot - Developed by acidvegas in Python (https://acid.vegas/trollbots)
+
+'''
+This bot requires network operator privledges in order to use the SAJOIN command.
+The bot will idle in the #spiderweb channel. Anyone leaving the channel will be force joined back.
+'''
+
+import socket
+import ssl
+import time
+
+nickserv_password='CHANGEME'
+operator_password='CHANGEME'
+
+def raw(msg):
+	sock.send(bytes(msg + '\r\n', 'utf-8'))
+
+while True:
+	try:
+		sock = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
+		sock.connect(('localhost', 6697))
+		raw(f'USER spider 0 * :CAUGHT IN THE WEB')
+		raw('NICK spider')
+		while True:
+			try:
+				data = sock.recv(1024).decode('utf-8')
+				for line in (line for line in data.split('\r\n') if len(line.split()) >= 2):
+					print('{0} | [~] - {1}'.format(time.strftime('%I:%M:%S'), line))
+					args=line.split()
+					if line.startswith('ERROR :Closing Link:'):
+						raise Exception('Connection has closed.')
+					elif args[0] == 'PING':
+						raw('PONG ' + args[1][1:])
+					elif args[1] == '001':
+						raw('MODE spider +BDd')
+						raw('PRIVMSG NickServ IDENTIFY spider ' + nickserv_password)
+						raw('OPER spider ' + operator_password)
+						raw('JOIN #spiderweb')
+					elif args[1] == 'PART' and len(args) >= 3:
+						if args[2]=='#spiderweb':
+							nick = args[0].split('!')[0][1:]
+							raw(f'SAJOIN {nick} #spiderweb')
+							raw(f'PRIVMSG #spiderweb :HA HA HA! IM A BIG ASSHOLE SPIDER AND {nick} IS CAUGHT IN MY SPIDER WEB!!!')
+			except (UnicodeDecodeError, UnicodeEncodeError):
+				pass
+	except:
+		sock.close()
+	finally:
+		time.sleep(15)
diff --git a/lyrics.py b/lyrics.py
@@ -1,7 +0,0 @@
-#!/usr/bin/env python
-# requires: https://pypi.org/project/lyricsgenius/
-import sys, lyricsgenius
-genius = lyricsgenius.Genius('CLIENT ACCESS TOKEN') # http://genius.com/api-clients
-genius.verbose = False
-song = genius.search_song(sys.argv[2], sys.argv[1])
-print(song.lyrics) if song else print('no lyrics found')
-\ No newline at end of file
diff --git a/mutag b/mutag
@@ -1,12 +0,0 @@
-#!/bin/sh
-# requires: id3v2 python-eyed3
-# this script removes all id3 tags/album art & sets 'artist' to the directory name & 'song' to the file name
-find $HOME/music -type f | while read SONG; do
-	DIR=$(dirname "$SONG")
-	ARTIST=$(basename "$DIR")
-	TITLE=$(basename "$SONG" | rev | cut -d"." -f2- | rev)
-	echo "$DIR | $ARTIST | $TITLE"
-	eyeD3 --remove-all-images "$SONG"
-	id3v2 --delete-all "$SONG"
-	id3v2 --artist "$ARTIST" --song "$TITLE" -2 "$SONG"
-done
-\ No newline at end of file
diff --git a/networking/discover.py b/networking/discover.py
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-import subprocess
-
-def portscan(ip):
-	ports = list()
-	try:
-		cmd = subprocess.check_output('nmap -F ' + ip, shell=True).decode()
-		output = cmd.split('SERVICE')[1].split('MAC')[0].split('\n')
-		for item in output:
-			port = item.split('/')[0]
-			if port and 'filtered' not in item:
-				ports.append(port)
-		return ports
-	except:
-		return None
-
-def scanhosts(subnet):
-	data = list()
-	matrix = {'ip':list(),'host':list(),'ports':list()}
-	cmd = subprocess.check_output(f'nmap -sP {subnet}/24', shell=True).decode()
-	output = cmd.split('Nmap scan report for ')[1:-1]
-	for item in output:
-		ip    = item.split('\n')[0]
-		ports = portscan(ip)
-		ports = ', '.join(ports) if ports else 'N/A'
-		mac   = item.split('MAC Address: ')[1].split()[0]
-		host  = item.split(mac)[1].replace('(','').replace(')','')[1:-1]
-		matrix['ip'].append(ip)
-		matrix['host'].append(host)
-		matrix['ports'].append(ports)
-		data.append({'ip':ip,'mac':mac,'host':host,'ports':ports})
-	for item in matrix:
-		matrix[item] = len(max(matrix[item], key=len))
-	print('\033[30m\033[47m{0}   {1}   {2}   {3} \033[0m'.format('IP Address'.ljust(matrix['ip']), 'MAC Address      ', 'Hostname'.ljust(matrix['host']), 'Ports'.ljust(matrix['ports'])))
-	for item in data:
-		print('{0} | {1} | {2} | {3}'.format(item['ip'].ljust(matrix['ip']), item['mac'], item['host'].ljust(matrix['host']), item['ports']))
-
-scanhosts('10.0.0.0')
-\ No newline at end of file
diff --git a/networking/mullvad.sh b/networking/mullvad.sh
@@ -1,29 +0,0 @@
-#ROOT CHECK
-
-ACCOUNT_NUMBER=CHANGEME
-PRIVATE_KEY= CHANGEME # wg genkey
-
-function get_servers() {
-	ADDRESS="$(curl -sSL https://api.mullvad.net/wg/ -d account="$ACCOUNT_NUMBER" --data-urlencode pubkey="$(wg pubkey <<< "$PRIVATE_KEY")")"
-	RESPONSE="$(curl -LsS https://api.mullvad.net/public/relays/wireguard/v1/)"
-	FIELDS="$(jq -r 'foreach .countries[] as $country (.; .; foreach $country.cities[] as $city (.; .; foreach $city.relays[] as $relay (.; .; $country.name, $city.name, $relay.hostname,$relay.public_key, $relay.ipv4_addr_in)))' <<< "$RESPONSE")"
-	while read -r COUNTRY && read -r CITY && read -r HOSTNAME && read -r PUBKEY && read -r IPADDR; do
-		{
-			echo "#COUNTRY @ $CITY"
-			echo "[Interface]"
-			echo "PrivateKey = $PRIVATE_KEY"
-			echo "Address = $ADDRESS"
-			echo "DNS = 193.138.218.74"
-			echo -e "\n[Peer]"
-			echo "PublicKey = $PUBKEY"
-			echo "Endpoint = $IPADDR:51820"
-			echo "AllowedIPs = 0.0.0.0/0, ::/0"
-		} > /etc/mullvad-${HOSTNAME%-wireguard}.conf
-	done <<< "$FIELDS"
-}
-
-function select_server() {
-	for file in /etc/wireguard/*; do
-	    echo $(basename "$file" | cut -d "-" -f2  )
-	done
-}
-\ No newline at end of file
diff --git a/networking/ovh6 b/networking/ovh6
@@ -1,5 +0,0 @@
-#!/bin/sh
-#usage: ovh6 IPV6_ADDRESS IPV6_GATEWAY
-ip addr add $1/64 dev eth0
-ip -6 route add $2 dev eth0
-ip -6 route add default via $2 dev eth0
-\ No newline at end of file
diff --git a/networking/v6gen.py b/networking/v6gen.py
@@ -1,13 +0,0 @@
-#!/usr/bin/env python
-# IPv6 Generator - Developed by acidvegas in Python (https://acid.vegas/random))
-import os,random
-interface = 'eth0'
-subnet    = '2607:5300:201:3000:'
-def randstr(size)                : return ''.join(random.sample(('1234567890ABCDEF'), size))
-def randv6(subnet)               : return f'{subnet}{randstr(4)}:{randstr(4)}:{randstr(4)}:{randstr(4)}'
-def v6(action,address,interface) : os.system(f'sudo ip addr {action} {address} dev {interafce}')
-for i in range(50):
-	v6('add',randv6(subnet),interface)
-	print(ip)
-#for ip in [line.rstrip() for line in open('ipv6.txt','r').readlines() if line]:
-#	v6('del',ip,interface
-\ No newline at end of file
diff --git a/pass b/pass
@@ -1,65 +0,0 @@
-#!/bin/sh
-# developed by acidvegas (https://acid.vegas/pass)
-# todo: oathtool check for git gpg gpg2 oathtool shred xclip
-
-GPG_ID="acidvegas"
-GPG_OPTS="--quiet --yes --compress-algo=none --no-encrypt-to --batch --use-agent"
-PASS_DIR=$HOME/.secrets
-
-gc() {
-	git -C $PASS_DIR add -A
-	git -C $PASS_DIR commit -m "$@"
-}
-
-edit() {
-	if [ -d /dev/shm ] && [ -w /dev/shm ] && [ -x /dev/shm ]; then
-		tmp=$(mktemp -u /dev/shm/pw.XXXXXXXXXX)
-	else
-		tmp=$(mktemp -u pw.XXXXXXXXXX)
-	fi
-	trap "shred -f -z $tmp" EXIT
-	if [ -f $PASS_DIR/$1.gpg ]; then
-		gpg2 -d -o $tmp $GPG_OPTS $PASS_DIR/$1.gpg
-		nano $tmp
-		if [ ! "$(gpg2 -d $GPG_OPTS $PASS_DIR/$1.gpg)" = "$(cat $tmp)" ]; then
-			gpg2 -e -r $GPG_ID -o $PASS_DIR/$1.gpg $GPG_OPTS $tmp
-			gc "modified $1"
-		fi
-	else
-		nano $tmp
-		if [ -f $tmp ]; then
-			mkdir -p $(dirname $PASS_DIR/$1)
-			gpg2 -e -r $GPG_ID -o $PASS_DIR/$1.gpg $GPG_OPTS $tmp
-			gc "created $1"
-		fi
-	fi
-}
-
-otp() {
-	echo "not done"
-}
-
-show() {
-	if [ -f $PASS_DIR/$1.gpg ]; then
-		gpg2 -d $GPG_OPTS $PASS_DIR/$1.gpg
-	else
-		echo "error: $1 does not exist"
-	fi
-}
-
-set -f+x
-export GPG_TTY=$(tty)
-umask 077
-mkdir -p $PASS_DIR
-
-if [ "$#" = '2' ]; then
-	if [ "$1" = "edit" ]; then
-		edit $2
-	elif [ "$1" = "otp" ]; then
-		otp $2
-	fi
-elif [ "$#" = '1' ]; then
-	show $1
-else
-	tree -C -l --noreport $PASS_DIR | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
-fi
-\ No newline at end of file
diff --git a/networking/riseup.sh b/riseup.sh
diff --git a/tables.py b/tables.py
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-# table plotter - developed by acidvegas in python (https://acid.vegas/random)
-# tableplot.py
-
-data = {
-	'number' : ('1','2','3','4','5'),
-	'name'   : ('mark', 'steven', 'fredrick', 'bronzel', 'billy'),
-	'race'   : ('simpson', 'WHITE BOI', 'peckerwood', 'bird', 'fartman')
-}
-
-def table(data):
-	columns = len(data)
-	for item in data:
-		max(data[item], key=len)
-	print('┌' + '─'*amount + '┐')
-	print('│ ' + title + ' '*amounnt + ' │ ')
-	print('├───────────┼────────────────┼───────┤')
-
-	print('└───────────┴────────────────┴───────┘')
-\ No newline at end of file
diff --git a/todo b/todo
@@ -1,17 +0,0 @@
-#!/bin/sh
-#todo: custom dmenu args cleaner, cli only mode
-db=$HOME/.todo
-touch $db
-while :
-do
-	cmd=$(dmenu -l 10 -m 0 -fn "Misc Ohsnap.Icons:style=Regular:size=11" -nb "#000000" -nf "#FFFFFF" -sb "#000000" -sf "#00D787" "$@" < "$db")
-	if [ -z "$cmd" ]; then
-		break
-	elif grep -q "^$cmd\$" "$db"; then
-		grep -v "^$cmd\$" "$db" > "$db.$$"
-		mv "$db.$$" "$db"
-	else
-		echo "$cmd" >> "$db"
-	fi
-done
-exit 0
-\ No newline at end of file
diff --git a/vps.sh b/vps.sh
@@ -1,25 +0,0 @@
-#!/bin/sh
-set -xev
-GIT_URL="https://raw.githubusercontent.com/acidvegas/archlinux/master"
-passwd root
-userdel -r alarm
-useradd -m -s /bin/bash acidvegas && gpasswd -a acidvegas wheel && passwd acidvegas
-timedatectl set-timezone America/New_York && timedatectl set-ntp true
-echo "LANG=en_US.UTF-8" > /etc/locale.conf && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen
-pacman-key --init && pacman-key --populate archlinux
-pacman -Syyu
-pacman -S gcc make patch pkg-config python python-pip
-pacman -S abduco exa git man ncdu sudo tor weechat which
-echo "clear && reset" > /etc/bash.bash_logout
-echo -e "export VISUAL=nano\nexport EDITOR=nano\nunset HISTFILE\nln /dev/null ~/.bash_history -sf" >> /etc/profile
-echo "[[ -f ~/.bashrc ]] && . ~/.bashrc" > /root/.bash_profile
-echo -e "[[ $- != *i* ]] && return\nalias diff='diff --color=auto'\nalias grep='grep --color=auto'\nalias ls='ls --color=auto'\nPS1='\e[1;31m> \e[0;33m\w \e[0;37m: '" > /root/.bashrc
-source /root/.bashrc
-history -c && export HISTFILESIZE=0 && export HISTSIZE=0 && unset HISTFILE
-[ -f /root/.bash_history ] && rm /root/.bash_history
-wget -O /etc/ssh/sshd_config $GIT_URL/etc/ssh/sshd_config
-wget -O /etc/sudoers.d/sudoers.lecture $GIT_URL/etc/sudoers.d/sudoers.lecture
-wget -O /etc/topdefaultrc $GIT_URL/etc/topdefaultrc
-echo -e "set boldtext\nset markmatch\nset minibar\nset morespace\nset nohelp\nset nonewlines\nset nowrap\nset quickblank\nset tabsize 4\nunbind ^J main\ninclude \"/usr/share/nano/*.nanorc\"" > /etc/nanorc
-echo -e "Defaults lecture = always\nDefaults lecture_file = /etc/sudoers.d/sudoers.lecture\nroot ALL=(ALL) ALL\n%wheel ALL=(ALL) ALL" > /etc/sudoers
-echo -e "[Journal]\nStorage=volatile\nSplitMode=none\nRuntimeMaxUse=500K" > /etc/systemd/journald.conf
-\ No newline at end of file