-
Notifications
You must be signed in to change notification settings - Fork 40
/
BotTerminal.sh
executable file
·88 lines (79 loc) · 3.12 KB
/
BotTerminal.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash
#
# script: BotTerminal.sh
#
# Para melhor compreensão foram utilizados parâmetros longos nas funções; Podendo
# ser substituidos pelos parâmetros curtos respectivos.
# Importando API
source ShellBot.sh
# Token do bot
bot_token='<TOKEN_AQUI>'
# Inicializando o bot com log.
ShellBot.init --token "$bot_token" --monitor --flush --log_file "/tmp/${0##*/}.log"
ShellBot.username
# A definição da regra a seguir utiliza uma construção curta na declaração
# de múltiplos comandos. Aplicando o recurso de expansão de variáveis e
# argumentos posicionais é possível criar comandos/argumentos para adequação
# da sintaxe, podendo ser distribuida em regras e tratamentos distintos.
#
# Comandos: /who, /date, /df e /du (regex)
ShellBot.setMessageRules --name 'terminal_comandos' \
--chat_type private \
--entitie_type bot_command \
--text '^/(who|date|df|du)[ ]+' \
--exec '${1#/} ${*:2}' # Remove a barra inicial do argumento posicional '$1' (bot comando) transformando-o
# em um comando de shell válido e passa os argumentos posicionais subsequentes.
#
# Exemplo:
#
# Exibindo o contéudo do arquivo e enumerando as respectivas linhas.
#
# bot comando: /cat -n /etc/group /etc/passwd
# exec: cat -n /etc/group /etc/passwd
# A regra abaixo demonstra a construção de uma linha de comando personalizada
# que recebe os elementos do texto como argumentos.
ShellBot.setMessageRules --name 'filtrar_arquivo' \
--chat_type private \
--entitie_type bot_command \
--command '/filtrar' \
--num_args 3 \
--exec 'cat "$3" | egrep "$2"' # Utilizando os argumentos posicionais.
#
# Exemplo:
#
# bot comando: /filtrar root /etc/group
# exec: cat "/etc/group" | egrep "root"
# Definindo uma regra que contém um comando que lista recursivamente
# o contéudo do diretório especificado.
# Obs: Dependendo do diretório informado a saída poderá ser dividida
# em várias mensagens de retorno e no pior dos cenários o possível
# excesso de requisições.
ShellBot.setMessageRules --name 'listar_diretorio' \
--chat_type private \
--entitie_type bot_command \
--command '/listar' \
--num_args 2 \
--exec 'ls -R $2' # Exemplo:
#
# bot comando: /listar /etc
# exec: ls -R /etc
# Aplica regra de erro caso nenhuma das regras anteriores forem satisfeitas.
ShellBot.setMessageRules --name 'comando_invalido' \
--chat_type private \
--entitie_type bot_command \
--bot_reply_message 'erro: comando não encontrado.'
while :
do
# Obtem as atualizações
ShellBot.getUpdates --limit 100 --offset $(ShellBot.OffsetNext) --timeout 30
# Lista o índice das atualizações
for id in $(ShellBot.ListUpdates)
do
# Inicio thread
(
# Gerenciar regras
ShellBot.manageRules --update_id $id
) & # Utilize a thread se deseja que o bot responda a várias requisições simultâneas.
done
done
#FIM