mirror of
https://github.com/sigmasternchen/MinervaBot
synced 2025-03-15 07:59:00 +00:00
not testen; i'll do that tomorrow
This commit is contained in:
parent
ae9b673baa
commit
c352088f9d
2 changed files with 118 additions and 0 deletions
29
config.py
Normal file
29
config.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
CONSUMER_KEY = 'Your Twitter API Consumer Key'
|
||||
CONSUMER_SECRET = 'Your Consumer Secret Key'
|
||||
ACCESS_TOKEN_KEY = 'Your Twitter API Access Token Key'
|
||||
ACCESS_TOKEN_SECRET = 'Your Access Token Secret'
|
||||
|
||||
# add @ to account name
|
||||
# leave empty for no mention
|
||||
DESTINATION_ACCOUNT = ''
|
||||
DESTINATION_ACCOUNT_IMPORTANT = ''
|
||||
|
||||
ALLOW_COMMANDS = false
|
||||
ALLOW_ONLY_DM_COMMANDS = false
|
||||
|
||||
# empty array for everyone
|
||||
# else add comma-separated, quote-enclosed twitter names with @
|
||||
COMMAND_SOURCE_ACCOUNTS = []
|
||||
|
||||
# use "w" for overwrite, or "a" for append
|
||||
LOG_TYPE = "a"
|
||||
LOG_FILE = "~/minerva.log"
|
||||
|
||||
COMMAND_NAME_SEPERATOR = "\n"
|
||||
|
||||
UPDATE_COMMANDS = [
|
||||
["uptime:", "uptime"],
|
||||
["mdstat:", 'cat /proc/mdstat | grep block | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /"'],
|
||||
["lxc:", 'lxc-ls -f -F name,state | grep -v "NAME" | grep -v \- | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ /: /" | sed "s/RUNNING/UP/" | sed "s/STOPPED/DOWN/"'],
|
||||
["df:", 'df -h --output=source,size,used | grep /dev/ | grep -v tmpfs | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /" | sed "s/ / /"']
|
||||
]
|
89
main.py
Normal file
89
main.py
Normal file
|
@ -0,0 +1,89 @@
|
|||
import twitter
|
||||
import sys
|
||||
import subprocess
|
||||
import datetime
|
||||
import time
|
||||
|
||||
from config import *
|
||||
|
||||
logfile = open(LOG_FILE, LOG_TYPE)
|
||||
|
||||
def log(text):
|
||||
logfile.write(datetime.datetime.now().isoformat() + ": " + text))
|
||||
|
||||
def connect():
|
||||
api = twitter.Api(
|
||||
consume_key = CONSUMER_KEY,
|
||||
consumer_secret = CONSUMER_SECRET,
|
||||
access_token_key = ACCESS_TOKEN_KEY,
|
||||
access_token_secret = ACCESS_TOKEN_SECRET
|
||||
)
|
||||
return api
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
log("starting minerva")
|
||||
|
||||
lastChange = 0
|
||||
|
||||
lastChange = api.getDirectMessages(since_id = lastChange)[0].GetId()
|
||||
lastChange = api.getMentions(since_id = lastChange)[0].GetId()
|
||||
|
||||
while true:
|
||||
if ALLOW_COMMANDS:
|
||||
dms = api.getDirectMessages(since_id = lastChange)
|
||||
|
||||
commandsToExecute = []
|
||||
for dm in dms:
|
||||
if COMMAND_SOURCE_ACCOUNTS.__len__() == 0:
|
||||
commandsToExecute.append([
|
||||
dm.GetSenderScreenName(),
|
||||
dm.GetText()
|
||||
])
|
||||
else
|
||||
for user in COMMAND_SOURCE_ACCOUNTS:
|
||||
if dm.GetSenderScreenName() == user:
|
||||
commandsToExecute.append([
|
||||
dm.GetSenderScreenName(),
|
||||
dm.GetText()
|
||||
])
|
||||
else
|
||||
log("unprivileged user @" + dm.GetSenderScreenName() + " tried to execute command (dm) \"" + dm.GetText().replace("\n", "\\n") + "\"\n")
|
||||
|
||||
if ! ALLOW_ONLY_DM_COMMANDS:
|
||||
mentions = api.GetMentions(since_id = lastChange)
|
||||
for mention in mentions:
|
||||
if COMMAND_SOURCE_ACCOUNTS.__len__() == 0:
|
||||
commandsToExecute.append([
|
||||
mention.GetUser().GetScreenName(),
|
||||
mention.GetText()
|
||||
])
|
||||
else
|
||||
for user in COMMAND_SOURCE_ACCOUNTS:
|
||||
if mention.GetUser().GetScreenName() == user:
|
||||
commandsToExecute.append([
|
||||
mention.GetUser().GetScreenName(),
|
||||
mention.GetText()
|
||||
])
|
||||
else
|
||||
log("unprivileged user @" + mention.GetUser().GetScreenName() + " tried to execute command \"" + mention.GetText().replace("\n", "\\n") + "\"\n")
|
||||
|
||||
|
||||
for command in commandsToExecute:
|
||||
log("executing command (@" + command[0] + ") \"" + command[1].replace("\n", "\\n") + "\"")
|
||||
output = subprocess.Popen(command[1], shell=True, stdout=PIPE).stdout.read()
|
||||
log("result: " + output);
|
||||
if (output + command[0]).len() + 2 > 140:
|
||||
api.PostUpdate(status = command[0] + "Output of command is too long. I'm sry. : /")
|
||||
else
|
||||
api.PostUpdate(status = command[0] + " " + output)
|
||||
|
||||
|
||||
for command in UPDATE_COMMANDS:
|
||||
output = subprocess.Popen(command[1], shell=True, stdout=PIPE).stdout.read()
|
||||
api.PostUpdate(status = (command[0] + COMMAND_NAME_SEPERATOR + output))
|
||||
|
||||
|
||||
time.sleep(5 * 60)
|
||||
|
Loading…
Reference in a new issue