add support for op 2
This commit is contained in:
parent
d40b8dfcaa
commit
d725403509
4 changed files with 58 additions and 5 deletions
|
@ -82,7 +82,6 @@ class Admin(Cog):
|
|||
m = ctx.send(f':ok_hand: Reloaded `{ext}`')
|
||||
self.bot.loop.create_task(m)
|
||||
|
||||
|
||||
@commands.command(typing=True)
|
||||
async def sql(self, ctx, *, statement: no_codeblock):
|
||||
"""Execute SQL."""
|
||||
|
|
30
bot/ext/rsudo.py
Normal file
30
bot/ext/rsudo.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
import logging
|
||||
|
||||
import discord
|
||||
|
||||
from .common import Cog
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Rsudo(Cog):
|
||||
def __init__(self, bot):
|
||||
super().__init__(bot)
|
||||
|
||||
async def create_request(self, message):
|
||||
# parse it, follows format command,uid
|
||||
uid = message.split(',')[-1]
|
||||
command = ','.join(message.split(',')[:-1])
|
||||
|
||||
log.info(f'[rsudo] {uid!r} {command!r}')
|
||||
|
||||
if not self.command_channel:
|
||||
return
|
||||
|
||||
e = discord.Embed(title=f'rsudo from uid {uid}')
|
||||
e.add_field(name='command', value=f'`{command}`')
|
||||
await self.command_channel.send(embed=e)
|
||||
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Rsudo(bot))
|
|
@ -7,3 +7,5 @@ db = {
|
|||
|
||||
bot_token = 'Mzg2Mjc1MDc3MzY2NDgwODk4.DQNi9A.BnyE5MnKaIaVMBbWiW9rVDwkrSs'
|
||||
owner_id = 162819866682851329
|
||||
|
||||
bot_token = None
|
||||
|
|
30
memed.py
30
memed.py
|
@ -14,9 +14,20 @@ import asyncpg
|
|||
import config
|
||||
from bot import schedule_bot
|
||||
|
||||
SOCKFILE = './memed.succ'
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
log = logging.getLogger(__name__)
|
||||
db = None
|
||||
bot = None
|
||||
|
||||
# for writer:
|
||||
# - op 0 : hello
|
||||
# - op 1 : request response
|
||||
|
||||
# for reader:
|
||||
# - op 1 : log
|
||||
# - op 2 : rsudo
|
||||
|
||||
|
||||
def parse_logstr(string):
|
||||
|
@ -38,6 +49,7 @@ def parse_logstr(string):
|
|||
cwd = [e[1] for e in s if e[0] == 'cwd'][0]
|
||||
return uid, cwd, command
|
||||
|
||||
|
||||
async def read_msg(reader):
|
||||
header = await reader.read(8)
|
||||
length, op = struct.unpack('Ii', header)
|
||||
|
@ -64,7 +76,8 @@ async def send_msg(writer, op: int, data: str):
|
|||
writer.write(msg)
|
||||
await writer.drain()
|
||||
|
||||
async def process(op: int, message: str):
|
||||
|
||||
async def process(reader, writer, op: int, message: str):
|
||||
"""Process messages given through the socket"""
|
||||
if op == 1:
|
||||
uid, cwd, command = parse_logstr(message)
|
||||
|
@ -72,6 +85,14 @@ async def process(op: int, message: str):
|
|||
await db.execute("""
|
||||
INSERT INTO logs (uid, cwd, cmd) VALUES ($1, $2, $3)
|
||||
""", uid, cwd, command)
|
||||
elif op == 2:
|
||||
rsudo = bot.get_cog('Rsudo')
|
||||
if not rsudo:
|
||||
return await send_msg(writer, 1, 'no rsudo cog')
|
||||
|
||||
await rsudo.create_request(message)
|
||||
return await send_msg(writer, 1, 'ok')
|
||||
|
||||
|
||||
async def handle_client(reader, writer):
|
||||
"""Handle clients"""
|
||||
|
@ -84,7 +105,7 @@ async def handle_client(reader, writer):
|
|||
addr = writer.get_extra_info('peername')
|
||||
log.debug('received %r from %s', message, addr)
|
||||
|
||||
await process(op, message)
|
||||
await process(reader, writer, op, message)
|
||||
|
||||
writer.close()
|
||||
except Exception as e:
|
||||
|
@ -95,13 +116,14 @@ async def handle_client(reader, writer):
|
|||
|
||||
if __name__ == '__main__':
|
||||
loop = asyncio.get_event_loop()
|
||||
coro = asyncio.start_unix_server(handle_client, './log.suck',
|
||||
coro = asyncio.start_unix_server(handle_client, SOCKFILE,
|
||||
loop=loop)
|
||||
|
||||
db = loop.run_until_complete(asyncpg.create_pool(**config.db))
|
||||
server = loop.run_until_complete(coro)
|
||||
|
||||
schedule_bot(loop, config, db)
|
||||
if config.bot_token:
|
||||
schedule_bot(loop, config, db)
|
||||
|
||||
log.info(f'Serving on {server.sockets[0].getsockname()}')
|
||||
try:
|
||||
|
|
Loading…
Reference in a new issue