mirror of
https://github.com/openmax-server/server.git
synced 2026-05-22 19:41:41 +03:00
Compare commits
8 Commits
0f2d946b98
...
7426e83914
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7426e83914 | ||
|
|
8dc3ef1731 | ||
|
|
f1ff4fd062 | ||
|
|
0b6eda6178 | ||
|
|
02df98cdbd | ||
|
|
49d73200b0 | ||
|
|
389a08ebce | ||
|
|
613e1b96cd |
@@ -43,9 +43,9 @@ 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(int(os.getenv("telegram_bot_enabled", 0)))
|
||||||
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_whitelist_enabled = bool(os.getenv("telegram_whitelist_enabled")) or True
|
telegram_whitelist_enabled = bool(int(os.getenv("telegram_whitelist_enabled", 0)))
|
||||||
|
|
||||||
### origins
|
### origins
|
||||||
origins = [x.strip() for x in os.getenv("origins", "").split(",") if x.strip()] if os.getenv("origins") else None
|
origins = [x.strip() for x in os.getenv("origins", "").split(",") if x.strip()] if os.getenv("origins") else None
|
||||||
|
|||||||
29
src/main.py
29
src/main.py
@@ -1,7 +1,9 @@
|
|||||||
# Импортирование библиотек
|
# Импортирование библиотек
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
import signal
|
||||||
import ssl
|
import ssl
|
||||||
|
import sys
|
||||||
|
|
||||||
from common.config import ServerConfig
|
from common.config import ServerConfig
|
||||||
from common.push import PushService
|
from common.push import PushService
|
||||||
@@ -175,11 +177,34 @@ async def main():
|
|||||||
|
|
||||||
api["telegram_bot"] = controllers["telegrambot"]
|
api["telegram_bot"] = controllers["telegrambot"]
|
||||||
|
|
||||||
tasks = [controller.launch(api) for controller in controllers.values()]
|
loop = asyncio.get_running_loop()
|
||||||
|
running_tasks = []
|
||||||
|
|
||||||
|
def _shutdown(sig):
|
||||||
|
logging.info(f"Получен сигнал {sig}, завершаем все задачи...")
|
||||||
|
for task in running_tasks:
|
||||||
|
task.cancel()
|
||||||
|
|
||||||
|
if sys.platform != "win32":
|
||||||
|
for sig in (signal.SIGTERM, signal.SIGINT):
|
||||||
|
loop.add_signal_handler(sig, _shutdown, sig)
|
||||||
|
|
||||||
|
coros = [controller.launch(api) for controller in controllers.values()]
|
||||||
|
running_tasks.extend(asyncio.create_task(coro) for coro in coros)
|
||||||
|
|
||||||
# Запускаем контроллеры
|
# Запускаем контроллеры
|
||||||
await asyncio.gather(*tasks)
|
try:
|
||||||
|
await asyncio.gather(*running_tasks)
|
||||||
|
except (asyncio.CancelledError, Exception):
|
||||||
|
logging.info("Все задачи завершены, выходим")
|
||||||
|
finally:
|
||||||
|
if hasattr(db, 'close'):
|
||||||
|
db.close()
|
||||||
|
await db.wait_closed()
|
||||||
|
elif hasattr(db, 'connection') and hasattr(db.connection, 'close'):
|
||||||
|
await db.connection.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
asyncio.run(main())
|
asyncio.run(main())
|
||||||
|
|
||||||
|
|||||||
@@ -3,120 +3,334 @@ class OnemeConfig:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
SERVER_CONFIG = {
|
SERVER_CONFIG = {
|
||||||
"async-tracer": 0,
|
"account-nickname-enabled": False,
|
||||||
"presence-ttl": 300,
|
"account-removal-enabled": False,
|
||||||
"non-contact-sync-time": 86400,
|
"anr-config": {
|
||||||
"contact-batching-variant": 0,
|
"enabled": True,
|
||||||
"account-nickname-enabled": True,
|
"timeout": {
|
||||||
"web-ad-banner": {
|
"low": 5000,
|
||||||
"enabled": False
|
"avg": 5000,
|
||||||
|
"high": 5000
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"edit-timeout": 0,
|
|
||||||
"reactions-menu": [],
|
|
||||||
"invite-long": "",
|
|
||||||
"calls-endpoint": "",
|
|
||||||
"calls-test-domain": "",
|
|
||||||
"max-readmarks": 100,
|
|
||||||
"max-cname-length": 200,
|
|
||||||
"max-description-length": 400,
|
|
||||||
"new-avatar-gradient-colors-enabled": True,
|
|
||||||
"max-msg-length": 4000,
|
|
||||||
"file-upload-unsupported-types": [],
|
|
||||||
"file-upload-max-size": 4294967296,
|
|
||||||
"image-quality": 0.8,
|
|
||||||
"image-width": 1920,
|
|
||||||
"image-height": 1920,
|
|
||||||
"image-size": 10000000,
|
|
||||||
"max-favorite-chats": 5,
|
|
||||||
"bot-complaint-enabled": True,
|
|
||||||
"reactions-max": 8,
|
|
||||||
"welcome-sticker-ids": [],
|
|
||||||
"edit-chat-type-screen-enabled": True,
|
|
||||||
"edit-channel-type-screen-enabled": True,
|
|
||||||
"esia-verify-botId": 0,
|
|
||||||
"official-org": False,
|
|
||||||
"esia-enabled": False,
|
|
||||||
"calls-debug-mode": False,
|
|
||||||
"channels-suggests-folder": True,
|
|
||||||
"delete-msg-fys-large-chat-disabled": False,
|
|
||||||
"calls-web-download-logs": False,
|
|
||||||
"calls-web-upload-logs": False,
|
|
||||||
"calls-video-zoom": False,
|
|
||||||
"calls-fullscreen-mode": False,
|
|
||||||
"group-call-part-limit": 100,
|
|
||||||
"call-chat-members-load-config": {},
|
|
||||||
"cfs": False,
|
|
||||||
"cse": False,
|
|
||||||
"calls-hotkeys": True,
|
|
||||||
"gc-link-pre-settings": False,
|
|
||||||
"gc-from-p2p": False,
|
|
||||||
"call-rate": {},
|
|
||||||
"channels-enabled": True,
|
|
||||||
"max-participants": 20000,
|
|
||||||
"max-added-participants": 100,
|
|
||||||
"saved-messages-aliases": [],
|
|
||||||
"author-visibility-forward-enabled": False,
|
|
||||||
"official-bot-naming-enabled": False,
|
|
||||||
"search-webapps-showcase": {
|
|
||||||
"items": []
|
|
||||||
},
|
|
||||||
"settings-entry-banners": [],
|
|
||||||
"settings-business": "https://telegram.org/blog/telegram-business",
|
|
||||||
"appearance-multi-theme-screen-enabled": True,
|
"appearance-multi-theme-screen-enabled": True,
|
||||||
"moscow-theme-enabled": True,
|
"audio-transcription-locales": [],
|
||||||
"creation-2fa-config": {
|
"available-complaints": [
|
||||||
"enabled": False,
|
"FAKE",
|
||||||
"pass_min_len": 6,
|
"SPAM",
|
||||||
"pass_max_len": 64,
|
"PORNO",
|
||||||
"hint_max_len": 30
|
"EXTREMISM",
|
||||||
|
"THREAT",
|
||||||
|
"OTHER"
|
||||||
|
],
|
||||||
|
"avatars-screen-enabled": True,
|
||||||
|
"bad-networ-indicator-config": {
|
||||||
|
"signalingConfig": {
|
||||||
|
"dcReportNetworkStatEnabled": False
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"lebedev-theme-enabled": True,
|
"bots-channel-adding": True,
|
||||||
"quotes-enabled": True,
|
"cache-msg-preprocess": True,
|
||||||
|
"call-incoming-ab": 2,
|
||||||
|
"call-permissions-interval": 259200,
|
||||||
|
"call-pinch-to-zoom": True,
|
||||||
|
"call-rate": {
|
||||||
|
"limit": 3,
|
||||||
|
"sdk-limit": 2,
|
||||||
|
"duration": 10,
|
||||||
|
"delay": 86400
|
||||||
|
},
|
||||||
|
"callDontUseVpnForRtp": False,
|
||||||
|
"callEnableIceRenomination": False,
|
||||||
|
"calls-endpoint": "",
|
||||||
|
"calls-sdk-am-speaker-fix": True,
|
||||||
|
"calls-sdk-audio-dynamic-redundancy": {
|
||||||
|
"mab": 16,
|
||||||
|
"dsb": 64,
|
||||||
|
"nl": True,
|
||||||
|
"df": True,
|
||||||
|
"dlb": True
|
||||||
|
},
|
||||||
|
"calls-sdk-enable-nohost": True,
|
||||||
|
"calls-sdk-incall-stat": False,
|
||||||
|
"calls-sdk-linear-opus-bwe": True,
|
||||||
|
"calls-sdk-mapping": {
|
||||||
|
"off": True
|
||||||
|
},
|
||||||
|
"calls-sdk-remove-nonopus-audiocodecs": True,
|
||||||
|
"calls-use-call-end-reason-fix": True,
|
||||||
|
"calls-use-ws-url-validation": True,
|
||||||
|
"cfs": True,
|
||||||
"channels-complaint-enabled": True,
|
"channels-complaint-enabled": True,
|
||||||
"reactions-settings-enabled": True,
|
"channels-enabled": True,
|
||||||
"channel-statistics-botid": 0,
|
"channels-search-subscribers-visible": True,
|
||||||
"enable-unknown-contact-bottom-sheet": 0,
|
"chat-complaint-enabled": False,
|
||||||
|
"chat-gif-autoplay-enabled": True,
|
||||||
|
"chat-history-notif-msg-strategy": 1,
|
||||||
|
"chat-history-persist": False,
|
||||||
|
"chat-history-warm-opts": 0,
|
||||||
|
"chat-invite-link-permissions-enabled": True,
|
||||||
|
"chat-media-scrollable-caption-enabled": True,
|
||||||
|
"chat-video-autoplay-enabled": True,
|
||||||
|
"chat-video-call-button": True,
|
||||||
|
"chatlist-subtitle-ver": 1,
|
||||||
|
"chats-folder-enabled": True,
|
||||||
|
"chats-page-size": 50,
|
||||||
|
"chats-preload-period": 15,
|
||||||
|
"cis-enabled": True,
|
||||||
|
"contact-add-bottom-sheet": True,
|
||||||
|
"creation-2fa-config": {
|
||||||
|
"pass_min_len": 6,
|
||||||
|
"pass_max_len": 64,
|
||||||
|
"hint_max_len": 30,
|
||||||
|
"enabled": True
|
||||||
|
},
|
||||||
|
"debug-profile-info": False,
|
||||||
|
"default-reactions-settings": {
|
||||||
|
"isActive": True,
|
||||||
|
"count": 8,
|
||||||
|
"included": False,
|
||||||
|
"reactionIds": []
|
||||||
|
},
|
||||||
|
"delete-msg-fys-large-chat-disabled": True,
|
||||||
|
"devnull": {
|
||||||
|
"opcode": True,
|
||||||
|
"upload_hang": True
|
||||||
|
},
|
||||||
|
"disconnect-timeout": 300,
|
||||||
|
"double-tap-reaction": "👍",
|
||||||
|
"double-tap-reaction-enabled": True,
|
||||||
|
"drafts-sync-enabled": False,
|
||||||
|
"edit-chat-type-screen-enabled": False,
|
||||||
|
"edit-timeout": 604800,
|
||||||
|
"enable-filters-for-folders": True,
|
||||||
|
"enable-unknown-contact-bottom-sheet": 2,
|
||||||
|
"fake-chats": True,
|
||||||
|
"family-protection-botid": 67804175,
|
||||||
|
"february-23-26-theme": True,
|
||||||
|
"file-preview": True,
|
||||||
|
"file-upload-enabled": True,
|
||||||
|
"file-upload-max-size": 4294967296,
|
||||||
|
"file-upload-unsupported-types": [
|
||||||
|
"exe"
|
||||||
|
],
|
||||||
|
"force-play-embed": True,
|
||||||
|
"gc-from-p2p": True,
|
||||||
|
"gce": False,
|
||||||
|
"group-call-part-limit": 100,
|
||||||
|
"grse": False,
|
||||||
|
"gsse": True,
|
||||||
|
"hide-incoming-call-notif": True,
|
||||||
|
"host-reachability": True,
|
||||||
|
"image-height": 1920,
|
||||||
|
"image-quality": 0.800000011920929,
|
||||||
|
"image-size": 40000000,
|
||||||
|
"image-width": 1920,
|
||||||
|
"in-app-review-triggers": 255,
|
||||||
"informer-enabled": True,
|
"informer-enabled": True,
|
||||||
"family-protection-botid": 0,
|
"inline-ev-player": True,
|
||||||
"new-year-theme-2026": True,
|
"invalidate-db-msg-exception": True,
|
||||||
|
"invite-friends-sheet-frequency": [
|
||||||
|
2,
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"invite-link": "",
|
||||||
|
"invite-long": "",
|
||||||
|
"invite-short": "",
|
||||||
|
"join-requests": True,
|
||||||
|
"js-download-delegate": False,
|
||||||
|
"keep-connection": 2,
|
||||||
|
"lebedev-theme-enabled": True,
|
||||||
|
"lgce": True,
|
||||||
|
"markdown-enabled": True,
|
||||||
|
"markdown-menu": 0,
|
||||||
|
"max-audio-length": 3600,
|
||||||
|
"max-description-length": 400,
|
||||||
|
"max-favorite-chats": 5,
|
||||||
|
"max-favorite-sticker-sets": 100,
|
||||||
|
"max-favorite-stickers": 100,
|
||||||
|
"max-msg-length": 4000,
|
||||||
|
"max-participants": 20000,
|
||||||
|
"max-readmarks": 100,
|
||||||
|
"max-theme-length": 200,
|
||||||
|
"max-video-duration-download": 1200,
|
||||||
|
"max-video-message-length": 60,
|
||||||
|
"media-order": 1,
|
||||||
|
"media-playlist-enabled": True,
|
||||||
|
"media-transform": {
|
||||||
|
"enabled": True,
|
||||||
|
"hdr_enabled": False,
|
||||||
|
"hevc_enabled": True,
|
||||||
|
"max_enc_frames": {
|
||||||
|
"low": 1,
|
||||||
|
"avg": 1,
|
||||||
|
"high": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"media-viewer-rotation-enabled": True,
|
||||||
|
"media-viewer-video-collage-enabled": True,
|
||||||
|
"mentions-enabled": True,
|
||||||
|
"mentions_entity_names_limit": 3,
|
||||||
|
"migrate-unsafe-warn": True,
|
||||||
|
"min-image-side-size": 64,
|
||||||
|
"miui-menu-enabled": True,
|
||||||
|
"money-transfer-botid": 1134691,
|
||||||
|
"moscow-theme-enabled": True,
|
||||||
|
"msg-get-reactions-page-size": 40,
|
||||||
|
"music-files-enabled": False,
|
||||||
|
"mytracker-enabled": True,
|
||||||
|
"net-client-dns-enabled": True,
|
||||||
|
"net-session-suppress-bad-disconnected-state": True,
|
||||||
|
"net-stat-config": [
|
||||||
|
64,
|
||||||
|
48,
|
||||||
|
128,
|
||||||
|
135
|
||||||
|
],
|
||||||
|
"new-admin-permissions": True,
|
||||||
|
"new-logout-logic": False,
|
||||||
|
"new-media-upload-ui": True,
|
||||||
|
"new-media-viewer-enabled": True,
|
||||||
|
"new-settings-storage-screen-enabled": False,
|
||||||
|
"new-width-text-bubbles-mob": True,
|
||||||
|
"new-year-theme-2026": False,
|
||||||
|
"nick-max-length": 60,
|
||||||
|
"nick-min-length": 7,
|
||||||
|
"official-org": True,
|
||||||
|
"one-video-failover": True,
|
||||||
|
"one-video-player": True,
|
||||||
|
"one-video-uploader": True,
|
||||||
|
"one-video-uploader-audio": True,
|
||||||
|
"one-video-uploader-progress-fix": True,
|
||||||
|
"perf-events": {
|
||||||
|
"startup_report": 2,
|
||||||
|
"web_app": 2
|
||||||
|
},
|
||||||
|
"player-load-control": {
|
||||||
|
"mp_autoplay_enabled": False,
|
||||||
|
"time_over_size": False,
|
||||||
|
"buffer_after_rebuffer_ms": 3000,
|
||||||
|
"buffer_ms": 500,
|
||||||
|
"max_buffer_ms": 13000,
|
||||||
|
"min_buffer_ms": 5000,
|
||||||
|
"use_min_size_lc": True,
|
||||||
|
"min_size_lc_fmt_mis_sf": 4
|
||||||
|
},
|
||||||
|
"progress-diff-for-notify": 1,
|
||||||
|
"push-delivery": True,
|
||||||
|
"qr-auth-enabled": True,
|
||||||
|
"quotes-enabled": True,
|
||||||
|
"react-errors": [
|
||||||
|
"error.comment.chat.access",
|
||||||
|
"error.comment.invalid",
|
||||||
|
"error.message.invalid",
|
||||||
|
"error.message.chat.access",
|
||||||
|
"error.message.like.unknown.like",
|
||||||
|
"error.message.like.unknown.reaction",
|
||||||
|
"error.too-many-unlikes-dialog",
|
||||||
|
"error.too-many-unlikes-chat",
|
||||||
|
"error.too-many-likes",
|
||||||
|
"error.reactions.not.allowed"
|
||||||
|
],
|
||||||
|
"react-permission": 2,
|
||||||
|
"reactions-enabled": True,
|
||||||
|
"reactions-max": 8,
|
||||||
|
"reactions-menu": [
|
||||||
|
"👍",
|
||||||
|
"❤️",
|
||||||
|
"🤣",
|
||||||
|
"🔥",
|
||||||
|
"😭",
|
||||||
|
"💯",
|
||||||
|
"💩",
|
||||||
|
"😡"
|
||||||
|
],
|
||||||
|
"reactions-settings-enabled": True,
|
||||||
|
"reconnect-call-ringtone": True,
|
||||||
|
"ringtone-am-mode": True,
|
||||||
|
"saved-messages-aliases": [
|
||||||
|
"избранное",
|
||||||
|
"saved",
|
||||||
|
"favourite",
|
||||||
|
"favorite",
|
||||||
|
"личное",
|
||||||
|
"моё",
|
||||||
|
"мои",
|
||||||
|
"мой",
|
||||||
|
"моя",
|
||||||
|
"любимое",
|
||||||
|
"сохраненные",
|
||||||
|
"сохраненное",
|
||||||
|
"заметки",
|
||||||
|
"закладки"
|
||||||
|
],
|
||||||
"scheduled-messages-enabled": True,
|
"scheduled-messages-enabled": True,
|
||||||
"scheduled-posts-enabled": True,
|
"scheduled-posts-enabled": True,
|
||||||
"scheduled-faves-enabled": True,
|
"search-webapps-showcase": {
|
||||||
"non-contact-complaints-enabled": True,
|
"items": []
|
||||||
"join-requests": True,
|
},
|
||||||
"web-persistent-cache": False,
|
"send-location-enabled": True,
|
||||||
"create-channel-type-screen": True,
|
"send-logs-interval-sec": 900,
|
||||||
|
"server-side-complains-enabled": True,
|
||||||
|
"set-audio-device": False,
|
||||||
|
"set-unread-timeout": 31536000,
|
||||||
|
"settings-entry-banners": [],
|
||||||
|
"show-reactions-on-multiselect": True,
|
||||||
"show-warning-links": True,
|
"show-warning-links": True,
|
||||||
|
"speedy-upload": True,
|
||||||
|
"speedy-voice-messages": True,
|
||||||
|
"sse": True,
|
||||||
|
"stat-session-background-threshold": 60000,
|
||||||
|
"sticker-suggestion": [
|
||||||
|
"RECENT",
|
||||||
|
"NEW",
|
||||||
|
"TOP"
|
||||||
|
],
|
||||||
|
"stickers-controller-suspend": True,
|
||||||
|
"stickers-db-batch": True,
|
||||||
|
"streamable-mp4": True,
|
||||||
|
"stub": "stub2",
|
||||||
|
"suspend-video-converter": True,
|
||||||
|
"system-default-ringtone-opt": True,
|
||||||
|
"transfer-botid": 1134691,
|
||||||
|
"typing-enabled-FILE": True,
|
||||||
|
"unique-favorites": True,
|
||||||
|
"unsafe-files-alert": True,
|
||||||
|
"upload-reusability": True,
|
||||||
|
"upload-rx-no-blocking": True,
|
||||||
|
"user-debug-report": 2340932,
|
||||||
|
"video-msg-channels-enabled": True,
|
||||||
|
"video-msg-config": {
|
||||||
|
"duration": 60,
|
||||||
|
"quality": 480,
|
||||||
|
"min_frame_rate": 30,
|
||||||
|
"max_frame_rate": 30
|
||||||
|
},
|
||||||
|
"video-msg-enabled": True,
|
||||||
|
"video-transcoding-class": [
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"views-count-enabled": True,
|
||||||
|
"watchdog-config": {
|
||||||
|
"enabled": True,
|
||||||
|
"stuck": 10,
|
||||||
|
"hang": 60
|
||||||
|
},
|
||||||
|
"webapp-exc": [],
|
||||||
|
"webapp-push-open": True,
|
||||||
|
"webview-cache-enabled": False,
|
||||||
|
"welcome-sticker-ids": [],
|
||||||
"white-list-links": [],
|
"white-list-links": [],
|
||||||
"february-23-26-theme": True,
|
"wm-analytics-enabled": True,
|
||||||
"march-8-26-theme": True,
|
"wm-workers-limit": 80,
|
||||||
"audio-play-cmd": False,
|
"wud": False,
|
||||||
"audio-play-opus": False,
|
|
||||||
"bots-channel-adding": True,
|
|
||||||
"stickers-botid": 0,
|
|
||||||
"sticker-set-edit-enabled": True,
|
|
||||||
"calls-new-history-enabled": True,
|
|
||||||
"y-map": {
|
"y-map": {
|
||||||
"tile": "",
|
"tile": "34c7fd82-723d-4b23-8abb-33376729a893",
|
||||||
"geocoder": "",
|
"geocoder": "34c7fd82-723d-4b23-8abb-33376729a893",
|
||||||
"static": ""
|
"static": "34c7fd82-723d-4b23-8abb-33376729a893",
|
||||||
|
"logoLight": "https://st.max.ru/icons/ya_maps_logo_light.webp",
|
||||||
|
"logoDark": "https://st.max.ru/icons/ya_maps_logo_dark.webp"
|
||||||
},
|
},
|
||||||
"enable-audio-messages-transcription": True,
|
"has-phone": True
|
||||||
"enable-video-messages-transcription": True,
|
}
|
||||||
"retry-transcribe-attempt": 5,
|
|
||||||
"retry-transcribe-timeout": 2000,
|
|
||||||
"org-profile": False,
|
|
||||||
"media-not-ready-retry-delay": 2000,
|
|
||||||
"polls-in-chats": True,
|
|
||||||
"polls-in-channels": True,
|
|
||||||
"render-polls": True,
|
|
||||||
"poll-ttl": {
|
|
||||||
"chat": 5000,
|
|
||||||
"bigchat": 15000,
|
|
||||||
"channel": 25000
|
|
||||||
},
|
|
||||||
"new-collage": False,
|
|
||||||
"channel-profile-invite-link": False,
|
|
||||||
"rename-profile-to-settings": True,
|
|
||||||
"live-streams": True
|
|
||||||
}
|
|
||||||
@@ -10,13 +10,18 @@ from common.opcodes import Opcodes
|
|||||||
class OnemeController(ControllerBase):
|
class OnemeController(ControllerBase):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.config = ServerConfig()
|
self.config = ServerConfig()
|
||||||
self.proto = MobileProto()
|
self.proto_tcp = MobileProto()
|
||||||
|
self.proto_web = WebProto()
|
||||||
self.opcodes = Opcodes()
|
self.opcodes = Opcodes()
|
||||||
|
|
||||||
async def event(self, target, client, eventData):
|
async def event(self, target, client, eventData):
|
||||||
# Извлекаем тип события и врайтер
|
# Извлекаем тип события и врайтер
|
||||||
eventType = eventData.get("eventType")
|
eventType = eventData.get("eventType")
|
||||||
writer = client.get("writer")
|
writer = client.get("writer")
|
||||||
|
is_web = client.get("type") == "web"
|
||||||
|
|
||||||
|
# Выбираем протокол в зависимости от типа подключения
|
||||||
|
proto = self.proto_web if is_web else self.proto_tcp
|
||||||
|
|
||||||
# Не отправляем событие самому себе
|
# Не отправляем событие самому себе
|
||||||
if writer == eventData.get("writer"):
|
if writer == eventData.get("writer"):
|
||||||
@@ -41,7 +46,7 @@ class OnemeController(ControllerBase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Создаем пакет
|
# Создаем пакет
|
||||||
packet = self.proto.pack_packet(
|
packet = proto.pack_packet(
|
||||||
cmd=0, seq=1, opcode=self.opcodes.NOTIF_MESSAGE, payload=payload
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_MESSAGE, payload=payload
|
||||||
)
|
)
|
||||||
elif eventType == "typing":
|
elif eventType == "typing":
|
||||||
@@ -58,7 +63,7 @@ class OnemeController(ControllerBase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Создаем пакет
|
# Создаем пакет
|
||||||
packet = self.proto.pack_packet(
|
packet = proto.pack_packet(
|
||||||
cmd=0, seq=1, opcode=self.opcodes.NOTIF_TYPING, payload=payload
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_TYPING, payload=payload
|
||||||
)
|
)
|
||||||
elif eventType == "profile_updated":
|
elif eventType == "profile_updated":
|
||||||
@@ -71,7 +76,7 @@ class OnemeController(ControllerBase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Создаем пакет
|
# Создаем пакет
|
||||||
packet = self.proto.pack_packet(
|
packet = proto.pack_packet(
|
||||||
cmd=0, seq=1, opcode=self.opcodes.NOTIF_PROFILE, payload=payload
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_PROFILE, payload=payload
|
||||||
)
|
)
|
||||||
elif eventType == "presence":
|
elif eventType == "presence":
|
||||||
@@ -85,13 +90,16 @@ class OnemeController(ControllerBase):
|
|||||||
"time": event_time
|
"time": event_time
|
||||||
}
|
}
|
||||||
|
|
||||||
packet = self.proto.pack_packet(
|
packet = proto.pack_packet(
|
||||||
cmd=0, seq=1, opcode=self.opcodes.NOTIF_PRESENCE, payload=payload
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_PRESENCE, payload=payload
|
||||||
)
|
)
|
||||||
|
|
||||||
# Отправляем пакет
|
# Отправляем пакет
|
||||||
writer.write(packet)
|
if is_web:
|
||||||
await writer.drain()
|
await writer.send(packet)
|
||||||
|
else:
|
||||||
|
writer.write(packet)
|
||||||
|
await writer.drain()
|
||||||
|
|
||||||
def launch(self, api):
|
def launch(self, api):
|
||||||
async def _start_all():
|
async def _start_all():
|
||||||
|
|||||||
@@ -431,5 +431,9 @@ class OnemeMobile:
|
|||||||
|
|
||||||
self.logger.info(f"Сокет запущен на порту {self.port}")
|
self.logger.info(f"Сокет запущен на порту {self.port}")
|
||||||
|
|
||||||
async with self.server:
|
try:
|
||||||
await self.server.serve_forever()
|
async with self.server:
|
||||||
|
await self.server.serve_forever()
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
self.server.close()
|
||||||
|
await self.server.wait_closed()
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import logging
|
|||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
import websockets
|
import websockets
|
||||||
|
import asyncio
|
||||||
from common.proto_web import WebProto
|
from common.proto_web import WebProto
|
||||||
from oneme.processors import Processors
|
from oneme.processors import Processors
|
||||||
from common.rate_limiter import RateLimiter
|
from common.rate_limiter import RateLimiter
|
||||||
@@ -319,7 +320,8 @@ class OnemeWS:
|
|||||||
"writer": websocket,
|
"writer": websocket,
|
||||||
"ip": addr[0],
|
"ip": addr[0],
|
||||||
"port": addr[1],
|
"port": addr[1],
|
||||||
"protocol": "oneme"
|
"protocol": "oneme",
|
||||||
|
"type": "web"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -333,7 +335,8 @@ class OnemeWS:
|
|||||||
"writer": websocket,
|
"writer": websocket,
|
||||||
"ip": addr[0],
|
"ip": addr[0],
|
||||||
"port": addr[1],
|
"port": addr[1],
|
||||||
"protocol": "oneme"
|
"protocol": "oneme",
|
||||||
|
"type": "web"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -410,4 +413,9 @@ class OnemeWS:
|
|||||||
|
|
||||||
self.logger.info(f"WebSocket запущен на порту {self.port}")
|
self.logger.info(f"WebSocket запущен на порту {self.port}")
|
||||||
|
|
||||||
await self.server.wait_closed()
|
try:
|
||||||
|
await self.server.wait_closed()
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
self.server.close()
|
||||||
|
await self.server.wait_closed()
|
||||||
|
raise
|
||||||
@@ -3,10 +3,103 @@ from tamtam.socket import TamTamMobile
|
|||||||
from tamtam.websocket import TamTamWS
|
from tamtam.websocket import TamTamWS
|
||||||
from classes.controllerbase import ControllerBase
|
from classes.controllerbase import ControllerBase
|
||||||
from common.config import ServerConfig
|
from common.config import ServerConfig
|
||||||
|
from common.proto_tcp import MobileProto
|
||||||
|
from common.proto_web import WebProto
|
||||||
|
from common.opcodes import Opcodes
|
||||||
|
|
||||||
class TTController(ControllerBase):
|
class TTController(ControllerBase):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.config = ServerConfig()
|
self.config = ServerConfig()
|
||||||
|
self.proto_tcp = MobileProto()
|
||||||
|
self.proto_web = WebProto()
|
||||||
|
self.opcodes = Opcodes()
|
||||||
|
|
||||||
|
async def event(self, target, client, eventData):
|
||||||
|
# Извлекаем тип события и врайтер
|
||||||
|
eventType = eventData.get("eventType")
|
||||||
|
writer = client.get("writer")
|
||||||
|
is_web = client.get("type") == "web"
|
||||||
|
|
||||||
|
# Выбираем протокол в зависимости от типа подключения
|
||||||
|
proto = self.proto_web if is_web else self.proto_tcp
|
||||||
|
|
||||||
|
# Не отправляем событие самому себе
|
||||||
|
if writer == eventData.get("writer"):
|
||||||
|
return
|
||||||
|
|
||||||
|
# Обрабатываем событие
|
||||||
|
if eventType == "new_msg":
|
||||||
|
# Данные сообщения
|
||||||
|
chatId = eventData.get("chatId")
|
||||||
|
message = eventData.get("message")
|
||||||
|
prevMessageId = eventData.get("prevMessageId")
|
||||||
|
time = eventData.get("time")
|
||||||
|
|
||||||
|
# Данные пакета
|
||||||
|
payload = {
|
||||||
|
"chatId": chatId,
|
||||||
|
"message": message,
|
||||||
|
"prevMessageId": prevMessageId,
|
||||||
|
"ttl": False,
|
||||||
|
"unread": 0,
|
||||||
|
"mark": time
|
||||||
|
}
|
||||||
|
|
||||||
|
# Создаем пакет
|
||||||
|
packet = proto.pack_packet(
|
||||||
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_MESSAGE, payload=payload
|
||||||
|
)
|
||||||
|
elif eventType == "typing":
|
||||||
|
# Данные события
|
||||||
|
chatId = eventData.get("chatId")
|
||||||
|
userId = eventData.get("userId")
|
||||||
|
type = eventData.get("type")
|
||||||
|
|
||||||
|
# Данные пакета
|
||||||
|
payload = {
|
||||||
|
"chatId": chatId,
|
||||||
|
"userId": userId,
|
||||||
|
"type": type
|
||||||
|
}
|
||||||
|
|
||||||
|
# Создаем пакет
|
||||||
|
packet = proto.pack_packet(
|
||||||
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_TYPING, payload=payload
|
||||||
|
)
|
||||||
|
elif eventType == "profile_updated":
|
||||||
|
# Данные события
|
||||||
|
profile = eventData.get("profile")
|
||||||
|
|
||||||
|
# Данные пакета
|
||||||
|
payload = {
|
||||||
|
"profile": profile
|
||||||
|
}
|
||||||
|
|
||||||
|
# Создаем пакет
|
||||||
|
packet = proto.pack_packet(
|
||||||
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_PROFILE, payload=payload
|
||||||
|
)
|
||||||
|
elif eventType == "presence":
|
||||||
|
userId = eventData.get("userId")
|
||||||
|
presence = eventData.get("presence")
|
||||||
|
event_time = eventData.get("time")
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"userId": userId,
|
||||||
|
"presence": presence,
|
||||||
|
"time": event_time
|
||||||
|
}
|
||||||
|
|
||||||
|
packet = proto.pack_packet(
|
||||||
|
cmd=0, seq=1, opcode=self.opcodes.NOTIF_PRESENCE, payload=payload
|
||||||
|
)
|
||||||
|
|
||||||
|
# Отправляем пакет
|
||||||
|
if is_web:
|
||||||
|
await writer.send(packet)
|
||||||
|
else:
|
||||||
|
writer.write(packet)
|
||||||
|
await writer.drain()
|
||||||
|
|
||||||
def launch(self, api):
|
def launch(self, api):
|
||||||
async def _start_all():
|
async def _start_all():
|
||||||
|
|||||||
@@ -199,7 +199,8 @@ class TamTamMobile:
|
|||||||
"writer": writer,
|
"writer": writer,
|
||||||
"ip": addr[0],
|
"ip": addr[0],
|
||||||
"port": addr[1],
|
"port": addr[1],
|
||||||
"protocol": "tamtam"
|
"protocol": "tamtam",
|
||||||
|
"type": "tcp"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -211,7 +212,8 @@ class TamTamMobile:
|
|||||||
"writer": writer,
|
"writer": writer,
|
||||||
"ip": addr[0],
|
"ip": addr[0],
|
||||||
"port": addr[1],
|
"port": addr[1],
|
||||||
"protocol": "tamtam"
|
"protocol": "tamtam",
|
||||||
|
"type": "tcp"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -239,5 +241,9 @@ class TamTamMobile:
|
|||||||
|
|
||||||
self.logger.info(f"Сокет запущен на порту {self.port}")
|
self.logger.info(f"Сокет запущен на порту {self.port}")
|
||||||
|
|
||||||
async with self.server:
|
try:
|
||||||
await self.server.serve_forever()
|
async with self.server:
|
||||||
|
await self.server.serve_forever()
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
self.server.close()
|
||||||
|
await self.server.wait_closed()
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import traceback
|
import traceback
|
||||||
import websockets
|
import websockets
|
||||||
|
import asyncio
|
||||||
from common.proto_web import WebProto
|
from common.proto_web import WebProto
|
||||||
from tamtam.processors import Processors
|
from tamtam.processors import Processors
|
||||||
from common.rate_limiter import RateLimiter
|
from common.rate_limiter import RateLimiter
|
||||||
@@ -186,7 +187,8 @@ class TamTamWS:
|
|||||||
"writer": websocket,
|
"writer": websocket,
|
||||||
"ip": addr[0],
|
"ip": addr[0],
|
||||||
"port": addr[1],
|
"port": addr[1],
|
||||||
"protocol": "tamtam"
|
"protocol": "tamtam",
|
||||||
|
"type": "web"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -198,7 +200,8 @@ class TamTamWS:
|
|||||||
"writer": websocket,
|
"writer": websocket,
|
||||||
"ip": addr[0],
|
"ip": addr[0],
|
||||||
"port": addr[1],
|
"port": addr[1],
|
||||||
"protocol": "tamtam"
|
"protocol": "tamtam",
|
||||||
|
"type": "web"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -229,4 +232,9 @@ class TamTamWS:
|
|||||||
|
|
||||||
self.logger.info(f"TT WebSocket запущен на порту {self.port}")
|
self.logger.info(f"TT WebSocket запущен на порту {self.port}")
|
||||||
|
|
||||||
await self.server.wait_closed()
|
try:
|
||||||
|
await self.server.wait_closed()
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
self.server.close()
|
||||||
|
await self.server.wait_closed()
|
||||||
|
raise
|
||||||
@@ -83,6 +83,10 @@ class TelegramBot:
|
|||||||
updatetime = str(int(time.time() * 1000))
|
updatetime = str(int(time.time() * 1000))
|
||||||
lastseen = str(int(time.time()))
|
lastseen = str(int(time.time()))
|
||||||
|
|
||||||
|
firstname = message.from_user.first_name[:59]
|
||||||
|
lastname = (message.from_user.last_name or "")[:59]
|
||||||
|
username = (message.from_user.username or f"user{int(time.time() * 1000)}")[:60]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Создаем юзера
|
# Создаем юзера
|
||||||
await cursor.execute(
|
await cursor.execute(
|
||||||
@@ -90,9 +94,9 @@ class TelegramBot:
|
|||||||
(
|
(
|
||||||
new_phone, # phone
|
new_phone, # phone
|
||||||
tg_id, # telegram_id
|
tg_id, # telegram_id
|
||||||
message.from_user.first_name[:59], # firstname
|
firstname, # firstname
|
||||||
(message.from_user.last_name or "")[:59], # lastname
|
lastname, # lastname
|
||||||
(message.from_user.username or "")[:60], # username
|
username, # username
|
||||||
json.dumps([]), # profileoptions
|
json.dumps([]), # profileoptions
|
||||||
json.dumps(["TT", "ONEME"]), # options
|
json.dumps(["TT", "ONEME"]), # options
|
||||||
0, # accountstatus
|
0, # accountstatus
|
||||||
@@ -131,7 +135,7 @@ class TelegramBot:
|
|||||||
async def start(self):
|
async def start(self):
|
||||||
if self.enabled:
|
if self.enabled:
|
||||||
try:
|
try:
|
||||||
await self.dp.start_polling(self.bot)
|
await self.dp.start_polling(self.bot, handle_signals=False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"Ошибка запуска Telegram бота: {e}")
|
self.logger.error(f"Ошибка запуска Telegram бота: {e}")
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user