#!/bin/bash
#
# script: MessageRules.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
ShellBot.init --token "$bot_token" --monitor --flush
ShellBot.username

# FUNÇÕES (AÇÃO)
#
# AS FUNÇÕES DEVEM SER DECLARADAS PREVIAMENTE ANTES DE SEREM
# VINCULADAS AS REGRAS.
#
apagar_grupo_url(){
	ShellBot.deleteMessage	--chat_id ${message_chat_id[$id]} \
							--message_id ${message_message_id[$id]}

	ShellBot.sendMessage 	--chat_id ${message_chat_id[$id]} \
							--text "Prezado [@${message_from_username[$id]}], não é permitido a divulgação de grupos/canais."  \
							--parse_mode markdown
}

ping_host(){
	ShellBot.sendMessage	--chat_id ${message_chat_id[$id]} \
							--text "$(ping -c4 ${message_text[$id]#* })"
}

msg_bem_vindo(){
	ShellBot.sendMessage	--chat_id ${message_chat_id[$id]} \
							--text "Seja bem vindo(a) [@${message_new_chat_member_username[$id]}] "'!!' \
							--parse_mode markdown
}

msg_despedida(){
	ShellBot.sendMessage	--chat_id ${message_chat_id[$id]} \
							--text "Tchau [@${message_left_chat_member_username[$id]}], esperamos que volte em breve." \
							--parse_mode markdown
}

apagar_msg(){
	ShellBot.deleteMessage 	--chat_id ${message_chat_id[$id]} \
							--message_id ${message_message_id[$id]}
}

usuario_info(){
	# A função recebe como argumento posicional os elementos contidos na
	# mensagem, onde '$2' contém o nome do usuário a ser consultado.
	ShellBot.sendMessage --chat_id ${message_chat_id[$id]} --text "$(id $2)"
}

# REGRAS
#
# XXX ATENÇÃO XXX
#
# AS REGRAS SÃO TRATADAS SEQUÊNCIALMENTE NA ORDEM EM QUE FORAM DEFINIDAS, CASO
# A MENSAGEM SATISFAÇA AO CONJUNTO DE CRITÉRIOS ESTABELECIDOS NA REGRA, A AÇÃO É
# APLICADA (SE PRESENTE) E SALTA PARA A PRÓXIMA REQUISIÇÃO.
#

# Criando duas regras sem ação que envia uma mensagem informativa sobre o horário
# de atendimento e ignora todas as requisições enviadas ao bot fora do dia/horário.

# Texto informativo
msg_info='Lamento, mas o horário para atendimento é das 8:00 às 18:00 de segunda à sexta.'

# Finais de semana em qualquer horário.
ShellBot.setMessageRules	--name 'bot_horario_operacao1' \
							--weekday 6 \
							--weekday 7 \
							--bot_reply_message "$msg_info"

# Dias da semana fora do horário operacional.
ShellBot.setMessageRules	--name 'bot_horario_operacao2' \
							--time '00:00-08:00,18:00-23:59' \
							--weekday '1,2,3,4,5' \
							--bot_reply_message "$msg_info"

# Define o comando e a quantidade de argumentos aceitos na mensagem.
# ex: /userinfo <usuario>
#         |        |
#       arg1      arg2
ShellBot.setMessageRules	--name 'ver_membro' \
							--user_status administrator

ShellBot.setMessageRules	--name 'obter_informacoes_do_usuario' \
							--action usuario_info \
							--command '/userinfo' \
							--num_args 2
							
# Liberar o comando 'ping' para uma lista de usuários em horários especificos.
ShellBot.setMessageRules	--name 'pingar_host' \
							--action ping_host \
							--command '/ping' \
							--username 'x_SHAMAN_x,admin1,admin2' \
							--time '12:00-14:30'
							
# Apagar as mensagens de divulgação em um grupo/super-grupo.
ShellBot.setMessageRules	--name 'apagar_postagem_de_grupos' \
							--action apagar_grupo_url \
							--entitie_type url \
							--chat_type 'supergroup,group' \
							--text 't.me/[a-zA-Z0-9_]+'

# Envia mensagem de boas-vindas ao usuário no momento que ingressar ao grupo.
ShellBot.setMessageRules	--name 'mensagem_boas_vindas' \
							--action msg_bem_vindo \
							--chat_type 'supergroup,group' \
							--chat_member new

# Envia mensagem de despedida quando o usuário deixar o grupo.
ShellBot.setMessageRules	--name 'mensagem_despedida' \
							--action msg_despedida \
							--chat_type 'supergroup,group' \
							--chat_member left

# Apagar todos os arquivos executaveis enviados entre 01:00 e 06:00 da manhã no mês de dezembro.
ShellBot.setMessageRules	--name 'apagar_executaveis' \
							--action apagar_msg	\
							--chat_type 'supergroup,group' \
							--date '01/12/2018-31/12/2018' \
							--time '01:00-06:00' \
							--mime_type 'application/x-executable'

# Apagar todas as fotos postadas no final de semana.
ShellBot.setMessageRules	--name 'apagar_fotos_final_de_semana' \
							--action apagar_msg \
							--chat_type 'supergroup,group' \
							--file_type photo \
							--weekday '6,7'

# Notifica o usuário sempre que o mesmo postar uma foto no grupo ou super-grupo.
ShellBot.setMessageRules	--name 'postagem_fotos' \
							--mime_type 'image/jpeg' \
							--chat_type 'supergroup,group' \
							--bot_reply_message 'Evite postar fotos no grupo, obrigado.'

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