255 lines
15 KiB
Plaintext
255 lines
15 KiB
Plaintext
|
# -*- coding: utf-8 -*-
|
|||
|
from irc3.plugins.command import command
|
|||
|
import irc3
|
|||
|
import os
|
|||
|
import sys
|
|||
|
import random
|
|||
|
import ipdb
|
|||
|
from random import randint
|
|||
|
from re import compile
|
|||
|
from irc3 import rfc
|
|||
|
|
|||
|
dir_path = os.path.dirname(os.path.realpath(__file__))
|
|||
|
|
|||
|
KRYPTR = []
|
|||
|
BOTNAMES = []
|
|||
|
BOTNICKS = []
|
|||
|
TOTAL_BOTS = 0
|
|||
|
READY_BOTS = []
|
|||
|
LOCK_KRYLON = 1 # 1
|
|||
|
INTERRUPTED = 0
|
|||
|
|
|||
|
class KRYLON():
|
|||
|
|
|||
|
def __init__(self,bot,channel):
|
|||
|
self.bot = bot
|
|||
|
self.channel = channel
|
|||
|
self.KRYLON_FILE = ['▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄', '█ █', '█ █', '█ █', '█ █', '█ ░ ░ █', '█ ░ █', '█ █', '█ ░ █', '█ ░ █', '█ ▐ ▌ █', '█ █', '█ ░ ░ █', '█ ░ ░ █', '█ █', '█ ▒ ░ ▌ ░ █', '█ ▌ ▌ ░ █', '█ ░ ▒ █', '█ ░ █', '█ ░ ░ ▌ ░ █', '█ ░ ░ ░ █', '█ ░ ░ ░ ░ ░ █', '█ ▒░ ░ ▒ ░ █', '█ ░ ░ ░ ▒░ ░ ░ ░ ▒ █', '█ ▒ ░ ░ ▒ ░ ░ ▒ ▒ █', '█ ▒ ░▒▒░ ░ ▒ ▒░▒ ▒ ░ ▒ ░ ▒ ▓ █', '█ ▓ ▒ ▓▓ ▓ ▓▒▓ ▒▓▓▒▒ ▒ ▓▓▒▒▓▓ █', '█ █ ██▒░ ▌ █ ▓█▓█▓███▓▓▒ ▓ ▓███▓██▒ █', '█ ▐▄ ░▒▒░▌ █ ░███████████▒▀ ▄█████████▓ █', '█ ▄▀ ▓███▓▄ ▓▐█ ▐███████░▀▀▄▄▄█████ █████▒ █', '█ ▀ ▐██▌██▓▒▄▄ ▄█ ░███████▓███████████████████░ █', '█ ▄▒█▌ ▒██▒▄▀█▓▓░▒▓▄▒ ▐ ░██████▀▀▀█▀██ ████████▓██████ █', '█ ▄░▓▒░█▄▒▌░██▓██░▀███░█▓▐▐▌ ░█▀ ▄▄█▌▓█████ ███████████████ █', '█ █▄▀░██████▒████▀ ▀▀██░██▄ ░█████▒███████████████ ▓█████▌ █', '█ ▐▒▌░▀█░░█▄░███ ▀▀█▌░ ███████████ ███▒███████▀▒█████ █', '█ ▀ ▀▀████<E29688><E29688>
|
|||
|
self.__run__()
|
|||
|
|
|||
|
def __run__(self):
|
|||
|
self.KRYLON_FILE.reverse()
|
|||
|
self.FILE_BUFFER=[]
|
|||
|
for _ in self.KRYLON_FILE:
|
|||
|
self.FILE_BUFFER.append(_)
|
|||
|
self.FILE_LINES = len(self.KRYLON_FILE)
|
|||
|
self.INIT = 0
|
|||
|
self.STARTED = 0
|
|||
|
self.FINISHED = 0
|
|||
|
self.FILE_INDEX = 0
|
|||
|
# BITWISE FILE LOCK SET
|
|||
|
self.KRYLON_FILE_LOCK = []
|
|||
|
for _ in range(len(self.KRYLON_FILE)):
|
|||
|
self.KRYLON_FILE_LOCK.append(1)
|
|||
|
# BITWISE R/W BOT LOCK SET
|
|||
|
self.BOTS_MODE_LOCK = []
|
|||
|
for _ in range(len(READY_BOTS)):
|
|||
|
self.BOTS_MODE_LOCK.append(zip('1','1'))
|
|||
|
# BITWISE R/W BOT LOCK UNSET
|
|||
|
R=[]; W=[]; _X=-1; _Y=-1;
|
|||
|
for _ in range(len(READY_BOTS)):
|
|||
|
_X,_Y=list(self.BOTS_MODE_LOCK[_])[0]
|
|||
|
R.append(int(_X))
|
|||
|
W.append(int(_Y))
|
|||
|
self.BOTS_MODE_READ=R
|
|||
|
self.BOTS_MODE_WRIT=W
|
|||
|
|
|||
|
@irc3.plugin
|
|||
|
class Plugin(object):
|
|||
|
|
|||
|
def __init__(self, context):
|
|||
|
self.log = context.log
|
|||
|
self.context = context
|
|||
|
self.channel = context.config.channel
|
|||
|
self._ST8 = 0
|
|||
|
|
|||
|
def __emoj(self,s):
|
|||
|
emote_db = '%s/emote.db' % dir_path
|
|||
|
emoj = random.choice(list(open(emote_db)))
|
|||
|
random.randint(0,1)
|
|||
|
if random.randint(0,1) == 0:
|
|||
|
emoj = "\x0304{}\x0F".format(emoj)
|
|||
|
else:
|
|||
|
emoj = "\x0303{}\x0F".format(emoj)
|
|||
|
s = s + ' ▶ ' + emoj
|
|||
|
return s
|
|||
|
|
|||
|
def __greet(self):
|
|||
|
greet_db = '%s/greet.db' % dir_path
|
|||
|
greet = random.choice(list(open(greet_db)))
|
|||
|
return greet
|
|||
|
|
|||
|
def __symbol(self):
|
|||
|
symbol_db = '%s/symbol.db' % dir_path
|
|||
|
symbol = random.choice(list(open(symbol_db)))
|
|||
|
return symbol
|
|||
|
|
|||
|
def rotate(self):
|
|||
|
self.b1n+=1
|
|||
|
if self.b1n == len(BOTNICKS):
|
|||
|
self.b1n=0
|
|||
|
ipdb.set_trace()
|
|||
|
|
|||
|
def spraying(self, mask, channel, **kw):
|
|||
|
|
|||
|
PTR = KRYPTR[0]
|
|||
|
PTR.kbr = []; PTR.kbw = []; PTR.kbl = [];
|
|||
|
PTR.chn = channel
|
|||
|
|
|||
|
for index in range(len(PTR.BOTS_MODE_READ)):
|
|||
|
PTR.kbr.append(PTR.BOTS_MODE_READ[index])
|
|||
|
PTR.kbw.append(PTR.BOTS_MODE_WRIT[index])
|
|||
|
PTR.kbl.append(PTR.KRYLON_FILE_LOCK[index])
|
|||
|
|
|||
|
PTR.fbu = PTR.FILE_BUFFER
|
|||
|
PTR.fli = PTR.FILE_LINES
|
|||
|
PTR.fin = PTR.FILE_INDEX
|
|||
|
BOTNAMES=','.join(self.context.config.botnet.keys()).split(',')
|
|||
|
PTR.bna = BOTNAMES
|
|||
|
BOTNICKS=[]
|
|||
|
for _ in BOTNAMES:
|
|||
|
BOTNICKS.append(self.context.config.botnet[_].nick)
|
|||
|
PTR.bni = BOTNICKS
|
|||
|
PTR.b1n = BOTNICKS.index(self.context.nick)
|
|||
|
PTR.int = 0
|
|||
|
|
|||
|
if PTR.INIT == 0:
|
|||
|
PTR._ST8 = 0
|
|||
|
PTR.INIT = 1
|
|||
|
print('<<<<<<> JUST INIT <>>>>>>') # test if initialized for first pass, fails on purpose
|
|||
|
PTR.STARTED = 1
|
|||
|
PTR.FINISHED = 0
|
|||
|
PTR.exe = 1 # set to recognize execution
|
|||
|
PTR.cyc = 0 # how many cycles within this operation, e.g. amount of bots pass through this function
|
|||
|
PTR.ops = 0 # how many completed operations, cycles reset, ops continue to count
|
|||
|
|
|||
|
#ipdb.set_trace()
|
|||
|
|
|||
|
for y in range(len(PTR.bni)):
|
|||
|
if not y == PTR.b1n:
|
|||
|
PTR.kbr[y] = 0
|
|||
|
else:
|
|||
|
PTR.kbw[y] = 1
|
|||
|
|
|||
|
PTR.who = self.context.nick
|
|||
|
MSG=PTR.fbu.pop()
|
|||
|
PTR.what = MSG
|
|||
|
PTR.fin+=1
|
|||
|
NEWBOT=','.join(list(self.context.config.botnet.keys())).split(',')[PTR.b1n]
|
|||
|
print(PTR.bni)
|
|||
|
print(PTR.bna)
|
|||
|
print(PTR.b1n)
|
|||
|
print(PTR.bni[PTR.b1n])
|
|||
|
print(PTR.bna[PTR.b1n])
|
|||
|
print("WHO:{} NEWBOT:{}".format(PTR.who,NEWBOT))
|
|||
|
self.context.privmsg(PTR.chn,MSG)
|
|||
|
|
|||
|
if PTR._ST8 <= 5 and PTR.int == 1:
|
|||
|
INTERRUPTED = 0
|
|||
|
PTR.int = INTERRUPTED
|
|||
|
PTR._ST8 = 3
|
|||
|
|
|||
|
@irc3.event(irc3.rfc.JOIN)
|
|||
|
def welcome(self, mask, channel, **kw):
|
|||
|
|
|||
|
if LOCK_KRYLON == 1:
|
|||
|
B0T = self.context
|
|||
|
B0TNAMES=','.join(self.context.config.botnet.keys()).split(',')
|
|||
|
B0TN1CKS=[]
|
|||
|
for _ in B0TNAMES:
|
|||
|
B0TN1CKS.append(self.context.config.botnet[_].nick)
|
|||
|
|
|||
|
for i,B0T.nick in enumerate(B0TN1CKS):
|
|||
|
if B0TN1CKS[i] == B0T.nick:
|
|||
|
NFLAG=1
|
|||
|
for _ in READY_BOTS:
|
|||
|
if B0T.nick == _:
|
|||
|
NFLAG=0
|
|||
|
|
|||
|
if NFLAG==1:
|
|||
|
READY_BOTS.append(self.context.nick)
|
|||
|
BOTCNT = len(self.context.config.botnet)
|
|||
|
|
|||
|
if len(READY_BOTS) == BOTCNT:
|
|||
|
BOTNICKS=B0TN1CKS
|
|||
|
BOTNAMES=B0TNAMES
|
|||
|
TOTAL_BOTS = BOTCNT;
|
|||
|
BOT=self.context
|
|||
|
CHN=channel
|
|||
|
k=KRYLON(BOT,CHN)
|
|||
|
KRYPTR.append(k)
|
|||
|
self.spraying(mask,channel,**kw)
|
|||
|
|
|||
|
@irc3.event(irc3.rfc.CONNECTED)
|
|||
|
def connected(self, **kw):
|
|||
|
|
|||
|
if LOCK_KRYLON == 1:
|
|||
|
self.context.join(self.channel)
|
|||
|
|
|||
|
|
|||
|
@irc3.event(rfc.PRIVMSG, iotype="out")
|
|||
|
def krylon_event(bot, mask=None, event=None, target=None, data=None):
|
|||
|
NICK=bot.context.nick
|
|||
|
CHANNEL=bot.channel
|
|||
|
MSG="CHANNEL: {} event out: {}".format(CHANNEL,NICK)
|
|||
|
print(MSG)
|
|||
|
# ipdb.set_trace()
|
|||
|
PTR = KRYPTR[0]
|
|||
|
B0T=bot.context
|
|||
|
B1N = PTR.bni.index(B0T.nick)
|
|||
|
|
|||
|
print("OUTPUT:{}".format(bot.context.nick))
|
|||
|
|
|||
|
@irc3.event(irc3.rfc.PRIVMSG, iotype="in")
|
|||
|
def on_privmsg(self, mask=None, data=None, **kw):
|
|||
|
|
|||
|
# B0T=self.context
|
|||
|
|
|||
|
# print(data)
|
|||
|
bot = self
|
|||
|
NICK=bot.context.nick
|
|||
|
CHANNEL=bot.channel
|
|||
|
MSG="CHANNEL: {} event out: {}".format(CHANNEL,NICK)
|
|||
|
print(MSG)
|
|||
|
# ipdb.set_trace()
|
|||
|
PTR = KRYPTR[0]
|
|||
|
B0T=bot.context
|
|||
|
B1N = PTR.bni.index(B0T.nick)
|
|||
|
|
|||
|
print("INPUT:{}".format(bot.context.nick))
|
|||
|
|
|||
|
WTF=0
|
|||
|
|
|||
|
if mask.nick == 'd':
|
|||
|
self.context.privmsg('#b0ts3x','dont interrupt me mofo')
|
|||
|
PTR.int = 1
|
|||
|
PTR.FILE_BUFFER=[]
|
|||
|
for _ in PTR.KRYLON_FILE:
|
|||
|
PTR.FILE_BUFFER.append(_)
|
|||
|
PTR.fbu = PTR.FILE_BUFFER
|
|||
|
PTR.INIT = 0
|
|||
|
PTR.fin=0
|
|||
|
PTR.b1n=0
|
|||
|
PTR.FINISHED = 0
|
|||
|
self.spraying(mask,channel,**kw)
|
|||
|
return
|
|||
|
|
|||
|
if PTR.who == mask.nick and PTR.STARTED == 1 and PTR.FINISHED == 0 and PTR.what == data and PTR.fin < PTR.fli:
|
|||
|
|
|||
|
|
|||
|
PTR.fin+=1
|
|||
|
PTR.b1n+=1
|
|||
|
if PTR.b1n == len(PTR.bni):
|
|||
|
PTR.b1n=0
|
|||
|
|
|||
|
PTR.who = PTR.bni[PTR.b1n]
|
|||
|
MSG=PTR.fbu.pop()
|
|||
|
PTR.what = MSG
|
|||
|
NEWBOT=','.join(list(bot.context.config.botnet.keys())).split(',')[PTR.b1n]
|
|||
|
print(NEWBOT)
|
|||
|
bot.context.config.botnet[NEWBOT].privmsg(CHANNEL,MSG)
|
|||
|
|
|||
|
if PTR.fin == PTR.fli:
|
|||
|
sys.exit(0)
|
|||
|
|