summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2018-09-10 09:45:49 +0000
committerbill-auger <mr.j.spam.me@gmail.com>2018-10-02 19:02:24 -0400
commitd741c6c8831fc44e89e8158d10f01ddbd1c951b8 (patch)
tree7f4fa213fc145280dcb3e9748e95222d4a9a4e92
parent478bc51a173e13d49c296e4b5178abc8ad847594 (diff)
implement "translate a user" feature
-rw-r--r--modules/m_translate.sh106
1 files changed, 73 insertions, 33 deletions
diff --git a/modules/m_translate.sh b/modules/m_translate.sh
index 31852b3..43637bb 100644
--- a/modules/m_translate.sh
+++ b/modules/m_translate.sh
@@ -38,6 +38,7 @@ module_translate_INIT()
modinit_API='2'
modinit_HOOKS='on_PRIVMSG'
helpentry_module_translate_description="Provides support for translating messages."
+ #commands_register "$1" 'translate' || return 1
which apertium &>/dev/null || log_error "[TRANSLATE]: ERROR: module failed to load - cannot find the \`apertium\` program"
which apertium &>/dev/null
@@ -58,7 +59,8 @@ module_translate_REHASH()
module_translate_on_PRIVMSG() # (hostmask , target , query)
{
- local hostmask=$1
+ local sender
+ local hostmask=$1 ; parse_hostmask_nick "${hostmask}" 'sender' ;
local target=$2
local query=$3
local bot_nick=${server_nick_current}
@@ -66,21 +68,31 @@ module_translate_on_PRIVMSG() # (hostmask , target , query)
DBG_TRANSLATE_CRITERIA
- if ! is_translatable_channel "${target}" ||
- ! is_translate_request "${query}"
- then was_handled=0
-
- else local message="${query#* translate }"
- local nick="$(echo "${message%% *}" | tr -d '/')"
-
-DBG_TRANSLATE
-
- if is_known_user ${nick}
- then translate_user ${target} ${nick}
- else translate_message ${target} "${message}"
+ if is_translatable_channel ${target}
+ then if is_translate_request "${query}"
+ then local command="$(expr "$query" : ${bot_nick}': \(!\?translate\)' )"
+ local message="$(expr "$query" : ${bot_nick}': !\?translate \(.*\)')"
+ local nick="$(echo "${message%% *}" | tr -d '/')"
+ local user_last_chat_line=$(get_user_last_chat_line ${nick})
+ local lang_pair
+
+ if [[ -n "${user_last_chat_line}" ]]
+ then set_translated_user ${nick} ${command}
+ message="${user_last_chat_line}"
+ lang_pair='es-en'
+ else lang_pair='en-es'
+ fi
+
+ translate_message ${target} "${message}" ${lang_pair}
+ was_handled=1
+
+ else if is_translated_user ${sender}
+ then translate_message ${target} "${query}"
+ was_handled=1
+ else was_handled=0
+ fi
fi
-
- was_handled=1
+ else was_handled=0
fi
# supress or allow further handling of this message
@@ -90,6 +102,8 @@ DBG_TRANSLATE
## helpers ##
+lowercase() { echo tr '[:upper:]' '[:lower:]' <<< "$*" ; }
+
is_translatable_channel() # (target)
{
local target=$1
@@ -102,34 +116,56 @@ is_translate_request() # (query)
local query=$1
local bot_nick=${server_nick_current}
- [[ "${query}" =~ ^"${bot_nick}: translate " ]]
+ [[ "${query}" =~ ^"${bot_nick}: translate " ]] || \
+ [[ "${query}" =~ ^"${bot_nick}: !translate " ]]
}
-is_known_user() # (nick)
+is_translated_user() # (sender)
+{
+ local sender=$1
+ local flag_file=announcements/people/$(lowercase ${sender//\/})/IS_TRANSLATED
+
+ [[ -f ${flag_file} ]]
+}
+
+set_translated_user() # (nick , command)
{
local nick=$1
+ local command=$2
+ local flag_file=announcements/people/$(lowercase ${nick//\/})/IS_TRANSLATED
+
+DBG_SET_TRANSLATE_USER
- [[ -n "${nick}" ]] && [[ -d announcements/people/${nick} ]]
+ if [[ "${command}" = 'translate' ]]
+ then touch ${flag_file}
+ else rm ${flag_file}
+ fi
}
-translate_user() # (target , nick)
+get_user_last_chat_line() # (nick)
{
- local target=$1
- local nick=$2
+ local nick=$1
+ local bot_nick=${server_nick_current}
+ local match="$(module_seen_SELECT ${nick_lower})"
+
+ [[ "$(lowercase ${nick})" == "$(lowercase ${bot_nick})" ]] && return 0
-DBG_TRANSLATE_USER
+ if [[ "${match}" =~ ([0-9]+)\|(#[^ |]+)\|(.*) ]]
+ then local timestamp=${BASH_REMATCH[1]}
+ local channel=${BASH_REMATCH[2]}
+ local chat_line="${BASH_REMATCH[3]}"
+ [[ ${chat_line} =~ ^ACTION\ (.*) ]] && chat_line="${BASH_REMATCH[1]}"
- # translate previous chat from $nick from spanish to english
- send_msg "${target}" "(not yet implemented)"
+ echo "${chat_line}"
+ fi
}
-translate_message() # (target , message)
+translate_message() # (target , message , lang_pair)
{
local target=$1
local message=$2
-
- # translate $message from english to spanish
- local translated_message=$(echo "${message}" | apertium en-es)
+ local lang_pair=$3
+ local translated_message=$(echo "${message}" | apertium ${lang_pair})
DBG_TRANSLATE_MSG
@@ -144,9 +180,13 @@ DBG_TRANSLATE_CRITERIA()
{
(( ${DEBUG} )) || return
- echo -n "[TRANSLATE]: target='${target}'" ; ! is_translatable_channel ${target} && echo -n " => wrong channel - returning" ; echo ;
- echo -n "[TRANSLATE]: query='${query}'" ; ! is_translate_request "${query}" && echo -n " => not a translate request - returning" ; echo ;
+ echo -n "[TRANSLATE]: target='${target}'" ; ! is_translatable_channel ${target} && echo -n " => wrong channel - returning" ; echo ;
+ echo -n "[TRANSLATE]: query='${query}'" ; is_translate_request "${query}" && echo -n " => is translate command" || echo -n " => is not translate command" ; echo ;
+ if is_translate_request "${query}"
+ then echo -n "[TRANSLATE]: nick?=${nick}" ; ! [[ "$(get_user_last_chat_line ${nick})" ]] && echo -n " => is known user - translating prev user chat" || echo -n " => is not known user - translating arbitrary message" ; echo ;
+ else echo -n "[TRANSLATE]: sender=${sender}" ; is_translated_user ${sender} && echo -n " => is translated user - translating chat" || echo -n " => is not translated user - returning" ; echo ;
+ fi
+
}
-DBG_TRANSLATE() { (( ${DEBUG} )) && echo "[TRANSLATE]: !!!triggered!!! $(is_known_user ${nick} && echo is_known_user nick=${nick} || echo message=${message})" ; }
-DBG_TRANSLATE_USER() { (( ${DEBUG} )) && echo "[TRANSLATE]: translate_user() nick=${nick}" ; }
-DBG_TRANSLATE_MSG() { (( ${DEBUG} )) && echo "[TRANSLATE]: translate_message() ${person} said: ${translated_message}" ; }
+DBG_SET_TRANSLATE_USER() { (( ${DEBUG} )) && echo -n "[TRANSLATE]: command=${command} - setting translate $([[ "${command}" = 'translate' ]] && echo on || echo off) for nick=${nick}" ; echo ; }
+DBG_TRANSLATE_MSG() { (( ${DEBUG} )) && echo "[TRANSLATE]: !!!triggered!!! ${person} said (${lang_pair}): ${translated_message}" ; }