mirror of
https://github.com/openmax-server/server.git
synced 2026-06-19 01:11:06 +03:00
Compare commits
5 Commits
master
..
498ffdf82a
| Author | SHA1 | Date | |
|---|---|---|---|
| 498ffdf82a | |||
| da1d762c51 | |||
| f627cdc785 | |||
| dfd1954795 | |||
| c3c9be3a30 |
@@ -0,0 +1 @@
|
|||||||
|
TODO
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# Описание протокола TamTam по Websocket
|
||||||
|
|
||||||
|
## Основная информация
|
||||||
|
В веб версии мессенджера ТамТам используется протокол, работающий поверх Websocket.
|
||||||
|
|
||||||
|
Пакеты в этом протоколе являются текстовыми JSON данными.
|
||||||
|
|
||||||
|
Структура пакета:
|
||||||
|
```
|
||||||
|
{
|
||||||
|
ver: int,
|
||||||
|
cmd: int,
|
||||||
|
seq: int,
|
||||||
|
opcode: int,
|
||||||
|
payload: {}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* ver - версия протокола
|
||||||
|
* cmd - определяет, от кого отправлен пакет. клиент - 0, сервер - 1
|
||||||
|
* seq - порядковый номер пакета (сервер дублирует его из запроса клиента)
|
||||||
|
* opcode - команда
|
||||||
|
* payload - полезная нагрузка команды
|
||||||
|
|
||||||
|
## Команды протокола
|
||||||
|
|
||||||
|
### PING (1)
|
||||||
|
Клиент периодически отправляет пакет с командой PING и пустой нагрузкой серверу.
|
||||||
|
Сервер отвечает ему тем же.
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
# Патч MAX для IOS
|
|
||||||
|
|
||||||
1) Распаковываете IPA
|
|
||||||
2) Находите файл MAX в Payload/Max.app
|
|
||||||
3) Открываете hex-редактор и находите api.oneme.ru и меняете на свой
|
|
||||||
При желании можете поменять другие URL
|
|
||||||
URL не должен привышать количество символов которое было у изначального URL!
|
|
||||||
4) Открываете IPA как архив и добавляете патченный файл MAX в Payload/Max.app
|
|
||||||
+2
-3
@@ -1,8 +1,7 @@
|
|||||||
# Навигация по faq
|
# Навигация по faq
|
||||||
|
|
||||||
## Работа с сервером
|
## Работа с сервером
|
||||||
- [Установка сервера](install.md)
|
[Установка сервера](install.md)
|
||||||
|
|
||||||
## Патчинг клиентов
|
## Патчинг клиентов
|
||||||
- [Патч мобильного клиента для Android](patch_apk.md)
|
[Патч apk](patch_apk.md)
|
||||||
- [Патч мобильного клиента для IOS](patch_ipa.md)
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
> [!Caution]
|
|
||||||
>
|
|
||||||
> На данной странице представлены инстансы от сторонних разработчиков.
|
|
||||||
>
|
|
||||||
> Используйте на свой страх и риск
|
|
||||||
>
|
|
||||||
|
|
||||||
# Открытые сервера
|
|
||||||
|
|
||||||
* [JustMAX](https://t.me/justmax_official)
|
|
||||||
* [mox.nyako.tk](https://t.me/opengrame/296), порт 443 (регистрация по реальному номеру)
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
> [!Caution]
|
> [!Caution]
|
||||||
>
|
>
|
||||||
> Проект находится на ранней стадии разработки и, вероятно, полон багов.
|
> Проект находится на ранней стадии разработки и вероятно полон багов.
|
||||||
>
|
>
|
||||||
> Использование в профессиональных средах не рекомендовано.
|
> Использование в профессиональных средах не рекомендовано.
|
||||||
>
|
>
|
||||||
@@ -13,7 +13,7 @@ https://t.me/openmax_alerts
|
|||||||
# Требования
|
# Требования
|
||||||
|
|
||||||
- Python 3.12+ (поддержка версий ниже не гарантирована)
|
- Python 3.12+ (поддержка версий ниже не гарантирована)
|
||||||
- MariaDB, MySQL или SQLite (использование последнего не рекомендуется, так как поддержка ещё в разработке)
|
- MariaDB, MySQL или SQLite
|
||||||
- Уметь патчить клиент MAX или собирать Komet из исходного кода (естественно с заменой сервера)
|
- Уметь патчить клиент MAX или собирать Komet из исходного кода (естественно с заменой сервера)
|
||||||
- Сертификат и приватный ключ X.509 (для тестирования сервера можно сгенерировать самоподписанный: ```openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365```)
|
- Сертификат и приватный ключ X.509 (для тестирования сервера можно сгенерировать самоподписанный: ```openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365```)
|
||||||
|
|
||||||
@@ -22,6 +22,4 @@ https://t.me/openmax_alerts
|
|||||||
Клиент может быть практически любым, главное условие - чтобы он был совместим с официальным сервером (`api.oneme.ru` / `api.tamtam.chat`).
|
Клиент может быть практически любым, главное условие - чтобы он был совместим с официальным сервером (`api.oneme.ru` / `api.tamtam.chat`).
|
||||||
|
|
||||||
# Дополнительная информация
|
# Дополнительная информация
|
||||||
- [FAQ](faq/readme.md)
|
[Faq](faq/readme.md)
|
||||||
- [Документация проекта](https://github.com/openmax-server/docs)
|
|
||||||
- [Публичные сервера](faq/servers.md)
|
|
||||||
|
|||||||
@@ -44,4 +44,8 @@ class ServerConfig:
|
|||||||
### Telegram bot
|
### Telegram bot
|
||||||
telegram_bot_token = os.getenv("telegram_bot_token") or "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
telegram_bot_token = os.getenv("telegram_bot_token") or "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
telegram_bot_enabled = bool(os.getenv("telegram_bot_enabled")) or True
|
telegram_bot_enabled = bool(os.getenv("telegram_bot_enabled")) or True
|
||||||
|
telegram_whitelist_enabled = bool(os.getenv("telegram_whitelist_enabled")) or False
|
||||||
|
telegram_blacklist_enabled = bool(os.getenv("telegram_blacklist_enabled")) or False
|
||||||
|
|
||||||
telegram_whitelist_ids = [x.strip() for x in os.getenv("telegram_whitelist_ids", "").split(",") if x.strip()]
|
telegram_whitelist_ids = [x.strip() for x in os.getenv("telegram_whitelist_ids", "").split(",") if x.strip()]
|
||||||
|
telegram_blacklist_ids = [x.strip() for x in os.getenv("telegram_blacklist_ids", "").split(",") if x.strip()]
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class Static:
|
|||||||
REGISTRATION_SUCCESS = "registration_success"
|
REGISTRATION_SUCCESS = "registration_success"
|
||||||
ACCOUNT_ALREADY_EXISTS = "account_already_exists"
|
ACCOUNT_ALREADY_EXISTS = "account_already_exists"
|
||||||
ID_NOT_WHITELISTED = "id_not_whitelisted"
|
ID_NOT_WHITELISTED = "id_not_whitelisted"
|
||||||
|
ID_BLACKLISTED = "id_blacklisted"
|
||||||
INTERNAL_ERROR = "internal_error"
|
INTERNAL_ERROR = "internal_error"
|
||||||
INCOMING_CODE = "incoming_code"
|
INCOMING_CODE = "incoming_code"
|
||||||
|
|
||||||
@@ -104,6 +105,9 @@ class Static:
|
|||||||
"id_not_whitelisted": """
|
"id_not_whitelisted": """
|
||||||
❌ Ваш ID не находится в белом списке.
|
❌ Ваш ID не находится в белом списке.
|
||||||
""",
|
""",
|
||||||
|
"id_blacklisted": """
|
||||||
|
❌ Ваш ID заблокирован.
|
||||||
|
""",
|
||||||
"internal_error": """
|
"internal_error": """
|
||||||
❌ Ошибка при регистрации аккаунта.
|
❌ Ошибка при регистрации аккаунта.
|
||||||
""",
|
""",
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class TelegramBot:
|
|||||||
self.enabled = enabled
|
self.enabled = enabled
|
||||||
self.db_pool = db_pool
|
self.db_pool = db_pool
|
||||||
self.whitelist_ids = whitelist_ids if whitelist_ids is not None else []
|
self.whitelist_ids = whitelist_ids if whitelist_ids is not None else []
|
||||||
|
self.blacklist_ids = blacklist_ids if blacklist_ids is not None else []
|
||||||
self.logger = logging.getLogger(__name__)
|
self.logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
self.msg_types = Static().BotMessageTypes()
|
self.msg_types = Static().BotMessageTypes()
|
||||||
@@ -46,10 +47,15 @@ class TelegramBot:
|
|||||||
async def handle_register(message):
|
async def handle_register(message):
|
||||||
tg_id = str(message.from_user.id)
|
tg_id = str(message.from_user.id)
|
||||||
|
|
||||||
# Проверка ID на наличие в белом списке
|
# Проверка ID на наличие в белом списке и в чёрном списке
|
||||||
|
if whitelist_enabled:
|
||||||
if tg_id not in self.whitelist_ids:
|
if tg_id not in self.whitelist_ids:
|
||||||
await self.bot.send_message(message.chat.id, self.get_bot_message(self.msg_types.ID_NOT_WHITELISTED))
|
await self.bot.send_message(message.chat.id, self.get_bot_message(self.msg_types.ID_NOT_WHITELISTED))
|
||||||
return
|
return
|
||||||
|
elif blacklist_enabled:
|
||||||
|
if tg_id in self.blacklist_ids:
|
||||||
|
await self.bot.send_message(message.chat.id, self.get_bot_message(self.msg_types.ID_BLACKLISTED))
|
||||||
|
return
|
||||||
|
|
||||||
async with self.db_pool.acquire() as conn:
|
async with self.db_pool.acquire() as conn:
|
||||||
async with conn.cursor() as cursor:
|
async with conn.cursor() as cursor:
|
||||||
|
|||||||
Reference in New Issue
Block a user