update v3.01
This commit is contained in:
parent
875d96d16e
commit
fa8aad1364
|
@ -0,0 +1,192 @@
|
|||
# krylon - art spam micro botnet logic v3.01
|
||||
```
|
||||
.oydddhhyo+/-.
|
||||
`hddddhhddddddddhso/.
|
||||
.dddh. ``..-:+ohdh-
|
||||
__ .__ -ddddds/-` -sd/`
|
||||
| | _________ ___.__.| | ____ ____ :dd//sdddhys+/:-` sdy-.
|
||||
| |/ /\_ __ < | || | / _ \ / \ ody `yhdhddddddhhs/:+ddd/
|
||||
| < | | \/\___ || |_( <_> ) | \ yd/ .hdh.hdhshddddddddddy
|
||||
|__|_ \ |__| / ____||____/\____/|___| / `dh. `yddo:dd: ``-/+odddddo
|
||||
\/ \/ \/ :hy +dddyhddhyo:. .sddddy:
|
||||
+hy hddhdddhsyhdhohdddy:`
|
||||
hdd` hdd/+hdhs//hddddy/`
|
||||
.dddo`odd` .+yddddddh/`
|
||||
`.--:://+-ydddyyds `+ddddh+`
|
||||
.oso+. `:oyhhhddddddy.-odddd+ `:ydddh+.
|
||||
:hddddh+`+ddddhyso++//+../ohddhyydddds.
|
||||
+hdddds::..sdd/.` -hso+oosyyhyo+-
|
||||
`odddhshy` `ody+-` -hdddy- ````+dh+
|
||||
`sdddy- -ys. /hddhs/-` .:+s/ -dddo
|
||||
`yddh. `oy/` .+hddddhso/-..```````.:ydddd+`++.
|
||||
`/hy+.` :yy+.` `/shdddddddhyyyssyyhddddddd-+dh/`
|
||||
`/yhs-` `/yhs/.` ./shddyyyyyhdddddddddddo`oddds
|
||||
`++-/yhy+-` -ohdy+:`` `-:+oyyysddddddddho-.odddds
|
||||
.sddhs:-+hdhs/.`.:shdhyo:.`` `..-/+osso/:.-ohddddd:
|
||||
`/hddddy- -/shdhs/--/ohdddhys+/:--..--:+shdddddddy
|
||||
.sddddh/ `-+yhddyo+osyddddddddddddddddddddddd:
|
||||
/hddddo` `-/oyhdddhddddddddddddddddddddds
|
||||
.sddddy- `-/+shdddddddddddddddddddh.
|
||||
/hdddh/ `.:/+osyhhhhhhys+/.
|
||||
.:+syyy` .sddddo` /o.
|
||||
.+ydddddddho- `-+ddddy- sdd+
|
||||
-sddddddhsoydddhhdddddh: .----. hddy
|
||||
-sddddds/.`ohdddddddddd+` .:oyddddddddy/` .ddd+
|
||||
`odddddo. .ydddddhddddh- -+ydddddddhhhddddh/ +ddd-
|
||||
/hddddh: .yhddo-.``odd/ .+hddddho/-.` `:ohhho` `hddh
|
||||
-ydddddd- `yddd: od. -sddddh+-` `/yho oddd:
|
||||
`+ddddddd+ +ddd: .d` .sdddds:` -ddodddy
|
||||
-ydddh/hdd. `hddo h- `/hdddy- yddddh.
|
||||
ydddo` hhy -ddh` so .` `sdddh/` .ddddd:
|
||||
ddd+ shy :ddo -h/.``:/ `ydddy. sdddd/
|
||||
hdd: /dh :dd/ :hhyhs` oddds` odddd/
|
||||
odd/ `dd` .dd/ `/o/` `ddds` `sdddh:
|
||||
.hdo od/ sdo .ddd- -ydddh-
|
||||
+dh` `hy -dh` `hdd- `+hddds.
|
||||
`yd+ /d/ od+ +dd/ `/hdddh/`
|
||||
.hd/ oh- `yh- `sdh. ./ydddds-
|
||||
-hd/ `yh- .yh. `odh+. `-ohddddy:`
|
||||
.yd/ `yh- .yh: :yhhs+:----/oydddddy/`
|
||||
.sdo` .yh: `sdo` `/ydddddddddddddy/`
|
||||
`ody. `oy/` `+hy:` `-ohddddddddy/`
|
||||
/hs-` `+sy- -yds- `` `./shdddddho-
|
||||
-yy+. :hdo` `/hds:` -:.`` ``./sddddddho:`
|
||||
`odh/` -ydh/` .+hdy+-` .syysyhddddddyo:`
|
||||
:hdy- `+hdy/` .+hddhs+:---yddddddy+sd/
|
||||
`ohds- .ohdy/. `:shddddddddddddd:.ydh`
|
||||
.shds:`-sdddo:` `:oyhhdddddddd+hddd-
|
||||
-sddho::shddho:` `.-://///ohddh-
|
||||
.+hdddsoydddddyo/-.` `odddy.
|
||||
-ohddddddddddddddhhyhhddd+
|
||||
-+sdddddddddddddddddh-
|
||||
.:+osyhdddddhys+`
|
||||
```
|
||||
```
|
||||
## summary
|
||||
```
|
||||
krylon v3.01
|
||||
```
|
||||
## changelog - v3.01
|
||||
```
|
||||
- rebased to integrate with dr1p4ns1 and m4pl1mp
|
||||
```
|
||||
## screenshots
|
||||
![screenshots](screenshots/s1.jpg)
|
||||
![screenshots](screenshots/s2.jpg)
|
||||
## overview
|
||||
```
|
||||
**no comment**
|
||||
```
|
||||
## prerequisites
|
||||
- `python3`
|
||||
## content
|
||||
- run.sh - **main file**
|
||||
## usage
|
||||
- syntax: `bash run.sh`
|
||||
## prerequisites
|
||||
- `apt install python3`
|
||||
- `apt install python3-pip`
|
||||
- `python3 -m pip install virtualenv`
|
||||
## installation
|
||||
- `git clone --recursive https://git.tcp.direct/decoded/m4pl1mp.git`
|
||||
- `cd m4pl1mp`
|
||||
- `virtualenv env -p python3`
|
||||
- `source env/bin/activate`
|
||||
- `pip install -r requirements.txt`
|
||||
## setting up environment
|
||||
- `git clone --recursive https://git.tcp.direct/decoded/krylon.git`
|
||||
## notes
|
||||
```
|
||||
- 1 - plugins/fifo_plugin.py - change line 12 in this file from this example below as reference.
|
||||
- 1 - self.runpath = self.config.get('runpath', '/home/dr1p/Documents/code/python/krylon/fifo')
|
||||
- 1 - to whatever the path of your fifo pipe is.. if you are unsure point it to krylon directory.
|
||||
|
||||
- 2 - when you run `bash run.sh` it generates a configuration file named `.krylon_config`, be sure
|
||||
- 2 - to add this section so that your fifo plugin path directories are setup. also change this path
|
||||
- 2 - to the same as the path you changed in the section above.
|
||||
|
||||
[plugins.fifo_plugin]
|
||||
runpath = /home/dr1p/Documents/code/python/krylon/fifo
|
||||
|
||||
- 3 - also make sure the fifo/krylon plugins are enabled in this file. e.g.
|
||||
|
||||
includes =
|
||||
plugins.krylon
|
||||
plugins.fifo
|
||||
|
||||
- 4 - below is an example configuration file just for visual reference
|
||||
- 4 - ~/code/krylon/.krylon_config
|
||||
|
||||
[bot]
|
||||
nick = dr1pp1ng
|
||||
username = dr1p
|
||||
realname = dr1pdr0p
|
||||
host = 192.168.1.37
|
||||
port = 6667
|
||||
channel = #tcpdirect
|
||||
version=1
|
||||
ssl = false
|
||||
|
||||
includes =
|
||||
irc3.plugins.command
|
||||
irc3.plugins.asynchronious
|
||||
irc3.plugins.storage
|
||||
irc3.plugins.uptime
|
||||
irc3.plugins.ctcp
|
||||
irc3.plugins.cron
|
||||
irc3.plugins.logger
|
||||
irc3.plugins.userlist
|
||||
plugins.b33p
|
||||
plugins.krylon
|
||||
plugins.fifo
|
||||
|
||||
flood_burst = 0
|
||||
flood_rate = 1
|
||||
flood_rate_delay = 1
|
||||
storage = json://.krylon_database
|
||||
|
||||
[irc3.plugins.command]
|
||||
cmd = ?
|
||||
guard = irc3.plugins.command.mask_based_policy
|
||||
|
||||
[irc3.plugins.command.masks]
|
||||
d!*dr1p@* = all_permissions
|
||||
* = view
|
||||
|
||||
ignore_list =
|
||||
g1mp_!*@*
|
||||
g1mp!*@*
|
||||
|
||||
[plugins.fifo_plugin]
|
||||
runpath = /home/dr1p/Documents/code/python/krylon/fifo
|
||||
|
||||
[bot_1]
|
||||
nick = ron17k_l5yad_
|
||||
username = 6dd7rp16
|
||||
channel = #tcpdirect
|
||||
|
||||
[bot_2]
|
||||
nick = _yk_92fr3onl2
|
||||
username = 2dpr11d
|
||||
channel = #tcpdirect
|
||||
|
||||
[bot_3]
|
||||
nick = a3rk_3yn_10ol
|
||||
username = p69dcr12
|
||||
channel = #tcpdirect
|
||||
|
||||
[bot_4]
|
||||
nick = 54r4_ko1lyn_6
|
||||
username = p1d61d5r
|
||||
channel = #tcpdirect
|
||||
|
||||
[bot_5]
|
||||
nick = n_o7y5r8_clk
|
||||
username = dr4a1dpd
|
||||
channel = #tcpdirect
|
||||
|
||||
[bot_6]
|
||||
nick = e_6rlenk_1oy7
|
||||
username = pdrd27f1
|
||||
channel = #tcpdirect
|
||||
```
|
|
@ -0,0 +1,19 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from irc3.plugins.command import command
|
||||
import irc3
|
||||
|
||||
@irc3.plugin
|
||||
class Plugin:
|
||||
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
@command(permission='view')
|
||||
def b33p(self, mask, target, args):
|
||||
"""b33p an irc b0t, it should b00p back
|
||||
%%b33p <dubstep>...
|
||||
"""
|
||||
robostep='{}: b00p'.format(mask.nick)
|
||||
roooboot = ''.join(args['<dubstep>'])
|
||||
if roooboot == self.bot.nick:
|
||||
self.bot.privmsg(target,robostep)
|
|
@ -0,0 +1,100 @@
|
|||
import os
|
||||
import irc3
|
||||
from stat import S_ISFIFO
|
||||
####################################################################################################
|
||||
@irc3.plugin
|
||||
class Fifo:
|
||||
BLOCK_SIZE = 1024
|
||||
MAX_BUFFER_SIZE = 800
|
||||
################################################################################################
|
||||
def __init__(self, context):
|
||||
self.context = context
|
||||
self.config = self.context.config
|
||||
self.send_blank_line = self.config.get('send_blank_line', True)
|
||||
self.runpath = self.config.get('runpath', '/home/dr1p/Documents/code/python/krylon/fifo')
|
||||
if not os.path.exists(self.runpath):
|
||||
os.makedirs(self.runpath)
|
||||
self.loop = self.context.loop
|
||||
self.fifos = {}
|
||||
self.buffers = {}
|
||||
self.context.duffer=[]
|
||||
self.create_fifo(None)
|
||||
################################################################################################
|
||||
@classmethod
|
||||
def read_fd(cls, fd):
|
||||
while True:
|
||||
try:
|
||||
return os.read(fd, cls.BLOCK_SIZE)
|
||||
except InterruptedError:
|
||||
continue
|
||||
except BlockingIOError:
|
||||
return b""
|
||||
################################################################################################
|
||||
def handle_line(self, line, channel):
|
||||
if not line:
|
||||
return
|
||||
line = line.decode("utf8")
|
||||
if not self.send_blank_line and not line.strip():
|
||||
return
|
||||
if channel is None:
|
||||
self.context.send_line(line)
|
||||
else:
|
||||
self.context.duffer.append(line)
|
||||
print('+++ fifo line input received +++')
|
||||
################################################################################################
|
||||
def data_received(self, data, channel):
|
||||
if not data:
|
||||
return
|
||||
prev = self.buffers.get(channel, b"")
|
||||
lines = (prev + data).splitlines(True)
|
||||
last = lines[-1]
|
||||
for line in lines[:-1]:
|
||||
line = line.rstrip(b'\r\n')
|
||||
self.handle_line(line, channel)
|
||||
if last.endswith(b'\n'):
|
||||
line = last.rstrip(b'\r\n')
|
||||
self.handle_line(line, channel)
|
||||
self.buffers[channel] = b""
|
||||
return
|
||||
if len(last) > self.MAX_BUFFER_SIZE:
|
||||
self.handle_line(last, channel)
|
||||
self.buffers[channel] = b""
|
||||
else:
|
||||
self.buffers[channel] = last
|
||||
################################################################################################
|
||||
def watch_fd(self, fd, channel):
|
||||
reading = True
|
||||
while reading:
|
||||
data = self.read_fd(fd)
|
||||
reading = len(data) == self.BLOCK_SIZE
|
||||
self.data_received(data, channel)
|
||||
################################################################################################
|
||||
def create_fifo(self, channel):
|
||||
if channel is None:
|
||||
path = os.path.join(self.runpath, ':raw')
|
||||
else:
|
||||
path = os.path.join(self.runpath, channel.strip('#&+'))
|
||||
try:
|
||||
mode = os.stat(path).st_mode
|
||||
except OSError:
|
||||
pass
|
||||
else:
|
||||
if not S_ISFIFO(mode):
|
||||
self.context.log.warn(
|
||||
'file %s created without mkfifo. remove it',
|
||||
path)
|
||||
os.remove(path)
|
||||
if not os.path.exists(path):
|
||||
os.mkfifo(path)
|
||||
fd = os.open(path, os.O_RDWR | os.O_NONBLOCK)
|
||||
self.loop.add_reader(fd, self.watch_fd, fd, channel)
|
||||
self.context.log.debug("%s's fifo is %s %r",
|
||||
channel or ':raw', path, fd)
|
||||
return fd
|
||||
@irc3.event(irc3.rfc.JOIN)
|
||||
################################################################################################
|
||||
def join(self, mask=None, channel=None, **kwargs):
|
||||
if mask.nick == self.context.nick:
|
||||
if channel not in self.fifos:
|
||||
self.fifos[channel] = self.create_fifo(channel)
|
||||
################################################################################################
|
|
@ -0,0 +1,153 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""#################################################################################################
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh+MMMMMMMMMMMMMMhsMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm/ oMMMMMMMMMMMMMMm +NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy` yMMMMMMMMMMMMMMM- -mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMs+dMMMMMMMMMM+ sMMMMMMMMMMMMMMM- `dMMMMMMMMMMms/NMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMM+ .omMMMMMM: -MMMMMMMMMMMMMMo `yMMMMMMMy: `dMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMM- /dMMM+ sMMMMMMMMMMMMh `hMMMNo` sMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMd :dm `mMMMMMMMMMMN. .NNo` .MMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMM: - :MMMMMMMMMMs :` sMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMs ymNMMMMMNm. NMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMy `-/-` .MMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMo .NMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMNh+. :sdMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMhso+:. `-/+syMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMM- dMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMM` `.:+/. `/s+:. sMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMNo -oms. .//-` `:/:` `+md+` .hMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMNs` .odNdo. .ohmd+` :dMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMNo` .. .- :hMMMMMMMMMMM
|
||||
MMMMMMMMMd+` -sNMMMMMMMM
|
||||
MMMMMMNs- `.. `/-. `+dMMMMMM
|
||||
MMMNy: ./sdNMMMh: `sNMMMNds/. .odMMM
|
||||
MM+ :ymMMMMMMMMMMh. +NMMMMMMMMMMmo- /NM
|
||||
MMMh: .sNMMMMMMMMMMMMMMN- `hMMMMMMMMMMMMMMMm+` :hMMM
|
||||
MMMMMd:` ``-:+shmMMMMMMMMMMMMMMMMMMN. hMMMMMMMMMMMMMMMMMMMmhs+/-..``````./dMMMMM
|
||||
MMMMMMMMMNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMo .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN. /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN+` `+NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs. -hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMdyymMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
#################################################################################################"""
|
||||
from irc3.plugins.command import command
|
||||
from irc3.plugins.cron import cron
|
||||
from irc3 import rfc
|
||||
import irc3
|
||||
####################################################################################################
|
||||
_botnicks=[]
|
||||
_duffer=[]
|
||||
_botops=[]
|
||||
_botrot=[]
|
||||
_botlok=0
|
||||
_botlvl=0
|
||||
####################################################################################################
|
||||
class KRYLON():
|
||||
################################################################################################
|
||||
def __init__(self,bot,channel):
|
||||
self.bot=bot
|
||||
self.channel=channel
|
||||
####################################################################################################
|
||||
@irc3.plugin
|
||||
class Plugin(object):
|
||||
################################################################################################
|
||||
def __init__(self,context):
|
||||
self.context=context
|
||||
self.channel=context.config.channel
|
||||
self.context.k=KRYLON(self.context,self.channel)
|
||||
################################################################################################
|
||||
def getbotnames(self):
|
||||
return list(self.context.config.botnet.keys())
|
||||
################################################################################################
|
||||
def getbotnicks(self):
|
||||
botnicks=[]
|
||||
for _ in self.getbotnames(): botnicks.append(self.context.config.botnet[_].nick)
|
||||
return botnicks
|
||||
################################################################################################
|
||||
@irc3.event(irc3.rfc.JOIN)
|
||||
def welcome(self,mask,channel,**kw):
|
||||
self.bot=self.context
|
||||
if not self.bot.nick in _botnicks:
|
||||
if self.bot.nick in self.getbotnicks():
|
||||
_botnicks.append(self.bot.nick)
|
||||
self.context.privmsg(channel,f'+++ networked +++')
|
||||
self.context.privmsg(channel,(f"bot {len(_botnicks)} of {len(self.getbotnames())-1} online"))
|
||||
if len(_botnicks) == len(self.getbotnames())-1:
|
||||
self.bot.k=KRYLON(self.context,channel)
|
||||
self.context.privmsg(channel,f'[ BOTNET ONLINE ]')
|
||||
################################################################################################
|
||||
@irc3.event(irc3.rfc.CONNECTED)
|
||||
def connected(self,**kw):
|
||||
self.context.join(self.channel)
|
||||
################################################################################################
|
||||
@irc3.event(rfc.PRIVMSG,iotype="out")
|
||||
def krylon_event(self,mask=None,event=None,target=None,data=None):
|
||||
global _botlok
|
||||
global _botops
|
||||
global _botrot
|
||||
global _botlok
|
||||
global _botlvl
|
||||
global _duffer
|
||||
bot=self
|
||||
nick=bot.context.nick
|
||||
channel=bot.channel
|
||||
nick=self.context.nick
|
||||
channel=self.channel
|
||||
if _botlok==1:
|
||||
if _botops[_botrot]==nick and data.strip() ==_duffer[_botrot].strip() and _botlvl==0:
|
||||
_botlvl=1
|
||||
################################################################################################
|
||||
@irc3.event(irc3.rfc.PRIVMSG,iotype="in")
|
||||
def on_privmsg(self,mask=None,data=None,**kw):
|
||||
global _botlok
|
||||
global _botops
|
||||
global _botrot
|
||||
global _botlok
|
||||
global _botlvl
|
||||
global _duffer
|
||||
bot=self
|
||||
nick=mask.nick
|
||||
channel=bot.channel
|
||||
if _botlok==1:
|
||||
if _botops[_botrot]==nick and data.strip() == _duffer[_botrot].strip() and _botlvl==1:
|
||||
_botlvl=0
|
||||
_botrot+=1
|
||||
botnames=list(self.context.config.botnet.keys())
|
||||
for i,_ in enumerate(botnames):
|
||||
if self.context.config.botnet[_].nick == _botops[_botrot]:
|
||||
self.context.config.botnet[_].privmsg(channel,_duffer[_botrot])
|
||||
if _botrot>=len(_duffer):
|
||||
_botlok=0
|
||||
_botrot=0
|
||||
_botlvl=0
|
||||
_botops=[]
|
||||
_duffer=[]
|
||||
####################################################################################################
|
||||
@cron('* * * * * */1')
|
||||
def krylon_event_system(self):
|
||||
global _botlok
|
||||
global _botops
|
||||
global _botrot
|
||||
global _botlok
|
||||
global _botlvl
|
||||
global _duffer
|
||||
target="#tcpdirect"
|
||||
if len(self.duffer) > 0 and _botlok==0:
|
||||
_duffer=self.duffer
|
||||
_botops=[]
|
||||
_botrot=0
|
||||
_botlok=1
|
||||
_botlvl=0
|
||||
n=0
|
||||
for _ in _duffer:
|
||||
_botops.append(_botnicks[n])
|
||||
n+=1
|
||||
if n >= len(_botnicks):
|
||||
n=0
|
||||
botnames=list(self.config.botnet.keys())
|
||||
for i,_ in enumerate(botnames):
|
||||
if self.config.botnet[_].nick == _botops[_botrot]:
|
||||
self.config.botnet[_].privmsg(target,_duffer[_botrot])
|
||||
####################################################################################################
|
|
@ -0,0 +1,130 @@
|
|||
INIT=0
|
||||
CONFIG=".krylon_config"; #[ -f $CONFIG ] && rm $CONFIG
|
||||
[ -f $CONFIG ] && INIT=1
|
||||
MEMORY=""
|
||||
|
||||
kset() {
|
||||
if [[ -z $1 ]] || [[ -z $2 ]]; then echo "error: no variable or value to kset()"; exit; fi
|
||||
echo "$1 = $2" >> $CONFIG
|
||||
}
|
||||
kwrite() {
|
||||
if [[ -z $1 ]]; then echo "error: no value to kwrite()"; exit; fi
|
||||
echo "$1" >> $CONFIG
|
||||
}
|
||||
kblank() {
|
||||
echo "" >> $CONFIG
|
||||
}
|
||||
|
||||
kprompt() {
|
||||
if [[ -z $1 ]] || [[ -z $2 ]] || [[ -z $3 ]] || [[ -z $4 ]] || [[ -z $5 ]] || [[ -z $6 ]]; then echo "error: no variable, prompt, help, enforcement, type or memory passed to kprompt()"; exit; fi
|
||||
local INIVAR=$1; local PROMPT=$2; local HALPLZ=$3; local ENFORCE=$4; local TYPE=$5; local MEMORIZE=$6; unset REPLY;
|
||||
while [[ -z "${REPLY}" ]] || [[ $ENFORCE -eq 1 ]]; do
|
||||
echo -en "$HALPLZ\n$PROMPT"; [ $ENFORCE -eq 0 ] && echo -n ": " || echo -n "[y/n]: "
|
||||
read;
|
||||
if [[ $ENFORCE -eq 1 ]] && [[ $TYPE -eq 0 ]]; then
|
||||
while ! [[ -z $ENFORCE ]]; do
|
||||
if ([ ${REPLY} == "y" ] || [ ${REPLY} == "Y" ]); then
|
||||
return 0
|
||||
elif ([ ${REPLY} == "n" ] || [ ${REPLY} == "N" ]); then
|
||||
return 9
|
||||
else
|
||||
echo -n "$HALPLZ\n$PROMPT"; [ $ENFORCE -eq 0 ] && echo -n ": " || echo -n "[y/n]: "
|
||||
read;
|
||||
fi;
|
||||
done;
|
||||
elif [[ $TYPE -eq 1 ]]; then
|
||||
while true; do
|
||||
[[ ${REPLY} =~ ^-?[0-9]+$ ]]
|
||||
if ! [ $? -eq 0 ]; then
|
||||
echo -n "$HALPLZ\n$PROMPT"; [ $ENFORCE -eq 0 ] && echo -n ": " || echo -n "[y/n]: "
|
||||
read;
|
||||
else
|
||||
return ${REPLY}
|
||||
fi
|
||||
done;
|
||||
fi;
|
||||
done;
|
||||
|
||||
if [ $MEMORIZE -eq 1 ]; then
|
||||
MEMORY=${REPLY}
|
||||
fi;
|
||||
|
||||
[ $TYPE -eq 1 ] && return ${REPLY} || kset "$INIVAR" "${REPLY}"
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if [ $INIT -eq 0 ]; then
|
||||
kwrite "[bot]"
|
||||
kprompt "nick" "bot ircnick" "bot's nickname to use on the network. e.g. here!*@*" 0 0 1
|
||||
BOTNICK=$(python -c "import random; print(''.join(random.sample('$MEMORY',len('$MEMORY'))))");
|
||||
kprompt "username" "bot username" "bot's username to use on the network. e.g. *!here@*" 0 0 1
|
||||
USERNAME=$(python -c "import random; print(''.join(random.sample('$MEMORY',len('$MEMORY'))))");
|
||||
kprompt "realname" "bot realname" "bot's realname that shows if someone. /whois bot." 0 0 0
|
||||
kprompt "host" "irc address" "the ip/hostname of the irc server this bot will connect to." 0 0 0
|
||||
kprompt "port" "irc port" "the port number of the irc server this bot will connect to." 0 0 0
|
||||
kprompt "channel" "irc channel" "the channel the bot(s) will join upon connection." 0 0 1
|
||||
CHANNEL=$MEMORY;
|
||||
kwrite "version=1"
|
||||
kprompt "ssl" "use ssl?" "is the connect to this irc server using secure socket layers?" 1 0 0
|
||||
[ $? -eq 0 ] && (kset "ssl" "true"; kset "ssl_verify" "cert_none") || (kset "ssl" "false")
|
||||
kprompt "bots" "how many helper bots?[0-255]" "how many bots will connect to the ircserver?" 0 1 0
|
||||
BOTCOUNT=$?;
|
||||
kblank
|
||||
kwrite "includes ="
|
||||
kwrite " irc3.plugins.command"
|
||||
kwrite " irc3.plugins.asynchronious"
|
||||
kwrite " irc3.plugins.storage"
|
||||
kwrite " irc3.plugins.uptime"
|
||||
kwrite " irc3.plugins.ctcp"
|
||||
kwrite " irc3.plugins.cron"
|
||||
kwrite " irc3.plugins.logger"
|
||||
kwrite " irc3.plugins.userlist"
|
||||
kwrite " plugins.b33p"
|
||||
kwrite " plugins.krylon"
|
||||
kblank
|
||||
kwrite "flood_burst = 0"
|
||||
kwrite "flood_rate = 1"
|
||||
kwrite "flood_rate_delay = 1"
|
||||
kwrite "storage = json://.krylon_database"
|
||||
kblank
|
||||
kwrite "[irc3.plugins.command]"
|
||||
kwrite "cmd = ?"
|
||||
kwrite "guard = irc3.plugins.command.mask_based_policy"
|
||||
kblank
|
||||
kwrite "[irc3.plugins.command.masks]"
|
||||
kwrite "d"'!'"*dr1p@* = all_permissions"
|
||||
kwrite "* = view"
|
||||
kblank
|
||||
kwrite "ignore_list ="
|
||||
kwrite " g1mp_"'!'"*@*"
|
||||
kwrite " g1mp"'!'"*@*"
|
||||
kwrite " ken_"'!'"*@*"
|
||||
kwrite " ken"'!'"*@*"
|
||||
kblank
|
||||
for i in $(seq 1 $BOTCOUNT); do
|
||||
kwrite "[bot_$i]"
|
||||
RANDOM=$((1 + $RANDOM % 255))
|
||||
SALT=$(printf '%x\n' $RANDOM)
|
||||
THIS=$SALT"_krylon_$(printf '%x\n' $i)"
|
||||
THAT=$(python -c "import random; print(''.join(random.sample('$THIS',len('$THIS'))))");
|
||||
kwrite "nick = $THAT"
|
||||
RANDOM=$((1 + $RANDOM % 255))
|
||||
SALT=$(printf '%x\n' $RANDOM)
|
||||
THIS=$SALT"$USERNAME"
|
||||
THAT=$(python -c "import random; print(''.join(random.sample('$THIS',len('$THIS'))))");
|
||||
kwrite "username = $THAT"
|
||||
kwrite "channel = $CHANNEL"
|
||||
kblank
|
||||
done;
|
||||
fi;
|
||||
|
||||
echo -e "\n-\n"
|
||||
|
||||
[ -f $CONFIG ] && cat $CONFIG
|
||||
|
||||
echo -e "\n-\nEXECUTING"
|
||||
|
||||
irc3 $CONFIG
|
||||
|
||||
exit
|
Binary file not shown.
After Width: | Height: | Size: 246 KiB |
Binary file not shown.
After Width: | Height: | Size: 286 KiB |
Binary file not shown.
After Width: | Height: | Size: 256 KiB |
Loading…
Reference in New Issue