diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py
index 0b9fc06..f416b79 100644
--- a/davtelepot/__init__.py
+++ b/davtelepot/__init__.py
@@ -14,7 +14,7 @@ __author__ = "Davide Testa"
__email__ = "davide@davte.it"
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
__license__ = "GNU General Public License v3.0"
-__version__ = "2.4.3"
+__version__ = "2.4.4"
__maintainer__ = "Davide Testa"
__contact__ = "t.me/davte"
diff --git a/davtelepot/languages.py b/davtelepot/languages.py
index 5113f6b..65c622b 100644
--- a/davtelepot/languages.py
+++ b/davtelepot/languages.py
@@ -6,45 +6,9 @@ from collections import OrderedDict
import logging
# Project modules
+from .messages import default_language_messages
from .utilities import extract, make_button, make_inline_keyboard
-default_language_messages = {
- 'language_command': {
- 'name': {
- 'en': "/language",
- 'it': "/lingua"
- },
- 'alias': {
- 'en': "Language 🗣",
- 'it': "Lingua 🗣"
- },
- 'reply_keyboard_button': {
- 'en': "Language 🗣",
- 'it': "Lingua 🗣"
- },
- 'description': {
- 'en': "Change language settings",
- 'it': "Cambia le impostazioni della lingua"
- }
- },
- 'language_button': {
- 'description': {
- 'en': "Change language settings",
- 'it': "Cambia le impostazioni della lingua"
- },
- 'language_set': {
- 'en': "Selected language: English 🇬🇧",
- 'it': "Lingua selezionata: Italiano 🇮🇹"
- }
- },
- 'language_panel': {
- 'text': {
- 'en': "Choose a language",
- 'it': "Seleziona una lingua"
- }
- }
-}
-
class MultiLanguageObject(object):
"""Make bot inherit from this class to make it support multiple languages.
@@ -57,12 +21,14 @@ class MultiLanguageObject(object):
"""
def __init__(self, *args,
- messages=dict(),
+ messages=None,
default_language='en',
missing_message="Invalid message!",
supported_languages=None,
**kwargs):
"""Instantiate MultiLanguageObject, setting its attributes."""
+ if messages is None:
+ messages = dict()
self.messages = messages
self._default_language = default_language
self._missing_message = missing_message
@@ -127,7 +93,7 @@ class MultiLanguageObject(object):
self._supported_languages = dict()
self._supported_languages.update(languages)
- def get_language(self, update=dict(), user_record=dict(), language=None):
+ def get_language(self, update=None, user_record=None, language=None):
"""Get language.
Language will be the first non-null value of this list:
@@ -136,6 +102,10 @@ class MultiLanguageObject(object):
- `update['language_code']`: language of incoming telegram update
- Fallback to default language if none of the above fits
"""
+ if user_record is None:
+ user_record = dict()
+ if update is None:
+ update = dict()
if (
language is None
and 'selected_language_code' in user_record
@@ -149,7 +119,7 @@ class MultiLanguageObject(object):
language = update['from']['language_code']
return language or self.default_language
- def get_message(self, *fields, update=dict(), user_record=dict(),
+ def get_message(self, *fields, update=None, user_record=None,
default_message=None, language=None, **format_kwargs):
"""Given a list of strings (`fields`), return proper message.
@@ -157,6 +127,10 @@ class MultiLanguageObject(object):
`format_kwargs` will be passed to format function on the result.
"""
# Choose language
+ if update is None:
+ update = dict()
+ if user_record is None:
+ user_record = dict()
language = self.get_language(
update=update,
user_record=user_record,
@@ -203,14 +177,18 @@ class MultiLanguageObject(object):
async def _language_command(bot, update, user_record):
- text, reply_markup = get_language_panel(bot, user_record)
+ text, reply_markup = get_language_panel(
+ bot=bot,
+ update=update,
+ user_record=user_record
+ )
return dict(
text=text,
reply_markup=reply_markup
)
-def get_language_panel(bot, user_record):
+def get_language_panel(bot, update, user_record):
"""Get language panel for user.
Return text and reply_markup of the message about user's language
@@ -218,7 +196,7 @@ def get_language_panel(bot, user_record):
"""
text = bot.get_message(
'language', 'language_panel', 'text',
- user_record=user_record,
+ update=update, user_record=user_record,
)
text += "\n"
if 'selected_language_code' in user_record:
@@ -287,7 +265,7 @@ async def _language_button(bot, update, user_record, data):
)
)
if len(data) == 0 or data[0] in ('show', 'set'):
- text, reply_markup = get_language_panel(bot, user_record)
+ text, reply_markup = get_language_panel(bot=bot, update=update, user_record=user_record)
if text:
return dict(
text=result,
@@ -299,19 +277,26 @@ async def _language_button(bot, update, user_record, data):
return result
-def init(
- bot, language_messages=None, show_in_keyboard=True,
- supported_languages={}
-):
+def init(telegram_bot,
+ language_messages=None,
+ show_in_keyboard=True,
+ supported_languages=None):
"""Set language support to `bot`."""
- assert isinstance(bot, MultiLanguageObject), (
+ if supported_languages is None:
+ supported_languages = {}
+ from .bot import Bot
+ assert isinstance(telegram_bot, MultiLanguageObject), (
"Bot must be a MultiLanguageObject subclass in order to support "
"multiple languages."
)
+ assert isinstance(telegram_bot, Bot), (
+ "Bot must be a davtelepot Bot subclass in order to support "
+ "command and button decorators."
+ )
if language_messages is None:
language_messages = default_language_messages
- bot.messages['language'] = language_messages
- bot.add_supported_languages(supported_languages)
+ telegram_bot.messages['language'] = language_messages
+ telegram_bot.add_supported_languages(supported_languages)
aliases = [
alias
@@ -319,7 +304,7 @@ def init(
'language_command']['alias'].values()
]
- @bot.command(
+ @telegram_bot.command(
command='/language',
aliases=aliases,
reply_keyboard_button=language_messages['language_command'][
@@ -331,7 +316,7 @@ def init(
async def language_command(bot, update, user_record):
return await _language_command(bot, update, user_record)
- @bot.button(
+ @telegram_bot.button(
prefix='lang:///',
separator='|',
description=language_messages['language_button']['description'],
diff --git a/davtelepot/messages.py b/davtelepot/messages.py
index 725d4f2..3c702e6 100644
--- a/davtelepot/messages.py
+++ b/davtelepot/messages.py
@@ -38,6 +38,43 @@ default_help_messages = {
},
}
+default_language_messages = {
+ 'language_command': {
+ 'name': {
+ 'en': "/language",
+ 'it': "/lingua"
+ },
+ 'alias': {
+ 'en': "Language 🗣",
+ 'it': "Lingua 🗣"
+ },
+ 'reply_keyboard_button': {
+ 'en': "Language 🗣",
+ 'it': "Lingua 🗣"
+ },
+ 'description': {
+ 'en': "Change language settings",
+ 'it': "Cambia le impostazioni della lingua"
+ }
+ },
+ 'language_button': {
+ 'description': {
+ 'en': "Change language settings",
+ 'it': "Cambia le impostazioni della lingua"
+ },
+ 'language_set': {
+ 'en': "Selected language: English 🇬🇧",
+ 'it': "Lingua selezionata: Italiano 🇮🇹"
+ }
+ },
+ 'language_panel': {
+ 'text': {
+ 'en': "Choose a language",
+ 'it': "Seleziona una lingua"
+ }
+ }
+}
+
default_suggestion_messages = {
'suggestions_command': {
'command': "/suggestion",