Telegram github commits and releases
4.41K subscribers
601 files
21K links
Broadcast from the most important Telegram clients' repositories
Download Telegram
morethanwords/tweb/master β€’ 01460eb β€’ 16 files, +664/-483
feat: call panel redesign + popup/grid polish
Keep right column resizable when left sidebar floats
Refactor checklist popup to procedural showChecklistPopup

#webk
🫑4
morethanwords/tweb/master β€’ a728bfa β€’ 13 files, +435/-31
feat: gift privacy settings

Add a "Gifts" entry under Privacy & Security combining:
- "Who can display gifts on my profile" (privacyKeyStarGiftsAutoSave)
with Always/Never Allow exception lists
- "Accepted Gift Types" β€” five toggles for the disallowed_gifts flags
(limited / unlimited / unique / from channels / premium subscriptions)
- "Show Gift Icon in Chats" β€” display_gifts_button on GlobalPrivacySettings
- Premium gating on the toggles: non-Premium users see a toast linking to
PopupPremium and the toggle reverts

Render a gift button in the chat input for DMs whose visibility honours
the new privacy: shown only when both sides are users (no bots / self /
service / replies / hidden), Chat type, and either my own or the peer's
display_gifts_button is on AND the peer hasn't disallowed all gift types.
Reconciled through the acknowledged pattern in finishPeerChange β€” a
modifyAckedPromise wrapper on appPrivacyManager.getGlobalPrivacySettings()
joins the existing userFull acked promise, and a nested callbackify chain
applies visibility synchronously inside the render closure when both
fetches are warm-cached (so the button settles in the same frame as the
rest of the input β€” no flicker). Cold first-load reveals lazily once both
resolve. Live updates fire on peer_full_update and on a new
global_privacy_update event from setGlobalPrivacySettings.

appPrivacyManager now caches GlobalPrivacySettings (sync return when
present, in-flight Promise reused), preloads it on user_auth, and
invalidates on set β€” so the acked check almost always resolves cached.

Mirror tdesktop's Mini Apps entry inside Always Allow / Never Allow:
- AddMembersTab gains optional extraCategories + selectedExtras; takeOut
now returns the extra-keys Set alongside peerIds
- Category buttons follow the includedChats pattern (.folder-categories
SettingSection + selector.checkbox()), wired through AppSelectPeers's
data-peer-id delegation
- PrivacySection.allowMiniApps opt-in adds the Mini Apps category,
reads/writes inputPrivacyValueAllow/DisallowBots, and surfaces the
selection in the row subtitle
- getPrivacyRulesDetails returns allowMiniApps / disallowMiniApps
- Privacy-row subtitles transform per tdesktop: Nobody + AllowBots β†’
"Mini Apps", Everybody + DisallowBots β†’ "Not Mini Apps", Contacts +
AllowBots β†’ "Contacts and Mini Apps"

Privacy exception peer rows now render the round checkbox on the right
(like includedChats) via a new checkboxSide option on AppSelectPeers and
round design for type === 'privacy'.

Also document the no-blocking-on-chat-open rule in CLAUDE.md so future
features don't slip a fresh network round-trip back into the Promise.all.

morethanwords/tweb/master β€’ 00d7be5 β€’ 1 files, +1/-1
fix appSelectPeers checkbox side regression

#webk
🫑3
morethanwords/tweb/master β€’ 7163733 β€’ 1 files, +5/-1
fix: hide input gift button when field is non-empty

#webk
🫑3
morethanwords/tweb/master β€’ c4a91e7 β€’ 1 files, +8/-10
Remove useless wrapper

morethanwords/tweb/master β€’ 58f5bde β€’ 1 files, +17/-5
Adjust hover color. Adjust dot position.

morethanwords/tweb/master β€’ 8c43ad4 β€’ 7 files, +75/-55
Refactor PollMessageContent to render without being attached to DOM.

morethanwords/tweb/master β€’ ef101df β€’ 4 files, +48/-7
Hightlight option on context menu

morethanwords/tweb/master β€’ ace43c2 β€’ 7 files, +81/-18
Highlight bubble on internal link processor

morethanwords/tweb/master β€’ 8a84b75 β€’ 3 files, +20/-20
Submit vote instantly on single-select. Show round checkbox instead of
radio.

morethanwords/tweb/master β€’ 79187eb β€’ 1 files, +2/-2
Adjust color.

morethanwords/tweb/master β€’ a185da4 β€’ 1 files, +2/-0
Adjust explanation margins

morethanwords/tweb/master β€’ 26b1381 β€’ 5 files, +164/-65
Refactor poll options handling

morethanwords/tweb/master β€’ d4108ca β€’ 2 files, +3/-3
Adjust avatar sizes for poll message content

morethanwords/tweb/master β€’ ea3438e β€’ 2 files, +62/-61
Make the footer as a button

morethanwords/tweb/master β€’ b2dacef β€’ 3 files, +20/-7
Highlight poll option when clicking on replies too

morethanwords/tweb/master β€’ c2c40ca β€’ 6 files, +31/-21
Optimize unnecessary encoding<->decoding of poll option

morethanwords/tweb/master β€’ 92ff317 β€’ 1 files, +1/-3
Fix poll option uint8array

morethanwords/tweb/master β€’ 91dd96b β€’ 300 files, +17537/-7498
Merge branch 'master' into feature/new-polls

#webk
🫑3
morethanwords/tweb/master β€’ 7799a08 β€’ 300 files, +19847/-8319
Merge branch 'feature/new-polls' into feature/create-managed-bot

morethanwords/tweb/master β€’ 2a1f59a β€’ 5 files, +95/-65
Add geo preview for description and explanation

morethanwords/tweb/master β€’ 2f334bb β€’ 3 files, +22/-1
Disable autoplay for video. Show play button on top of video.

morethanwords/tweb/master β€’ a0b7333 β€’ 2 files, +14/-3
Disable Allow adding options when disabling Show who voted

morethanwords/tweb/master β€’ d4f30e0 β€’ 3 files, +3/-1
Change wording when multiple answers

morethanwords/tweb/master β€’ b819390 β€’ 5 files, +76/-61
Refactor adding options logic

morethanwords/tweb/master β€’ 14cd1ed β€’ 2 files, +223/-158
Refactor canceling video rendering logic to cancel immediately.

morethanwords/tweb/master β€’ 98d6470 β€’ 15 files, +512/-91
Support adding videos when creating poll

morethanwords/tweb/master β€’ 7c1308e β€’ 1 files, +25/-0
Recheck permissions before sending poll

morethanwords/tweb/master β€’ cada2ac β€’ 7 files, +13/-33
Remove StandaloneSignal useless type

morethanwords/tweb/master β€’ d2596da β€’ 4 files, +123/-47
Refactor MediaAttachment video styles and change wording when GIF is
attached

morethanwords/tweb/master β€’ faaaf5b β€’ 4 files, +203/-1
Don't generate video if no changes were made

morethanwords/tweb/master β€’ 66224df β€’ 2 files, +22/-3
Show gif label in poll option video attachment

morethanwords/tweb/master β€’ da210f3 β€’ 2 files, +6/-4
Adjust cancel button

#webk
🫑3
morethanwords/tweb/master β€’ 141e4e1 β€’ 1 files, +1/-1
Show drag handle on first option always

morethanwords/tweb/master β€’ cc56b4d β€’ 3 files, +41/-11
Handle component cleanup in MediaAttachment

morethanwords/tweb/master β€’ a52d486 β€’ 2 files, +17/-2
Prevent recursive click handling on media viewer targets

morethanwords/tweb/master β€’ a5c22b4 β€’ 1 files, +7/-5
Add missing rights check in AddOption

morethanwords/tweb/master β€’ b40c055 β€’ 2 files, +32/-26
Fix hover on add option's button icons

morethanwords/tweb/master β€’ 535810c β€’ 2 files, +15/-1
Fix spinner color

morethanwords/tweb/master β€’ 806771d β€’ 5 files, +30/-10
Focus on InputField when clicking on form field

morethanwords/tweb/master β€’ 67c7449 β€’ 6 files, +62/-3
Handle uploadingFileName's on uploading poll media

morethanwords/tweb/master β€’ 0246cc1 β€’ 1 files, +6/-4
Fix poll media finalization not being run

morethanwords/tweb/master β€’ 68a1efc β€’ 46 files, +2244/-587
Merge branch 'master' into feature/new-polls

morethanwords/tweb/master β€’ ee92734 β€’ 4 files, +5/-7
Handle venue location too

morethanwords/tweb/master β€’ 14bbfca β€’ 1 files, +1/-1
Fix type

morethanwords/tweb/master β€’ 047c7b6 β€’ 183 files, +11314/-3700
Merge pull request #631 from H7GhosT/feature/new-polls

New polls

morethanwords/tweb/master β€’ 1d58eb4 β€’ 79 files, +3729/-1058
Merge branch 'master' into feature/create-managed-bot

#webk
🫑3
morethanwords/tweb/master β€’ bc77ae7 β€’ 10 files, +588/-4
Merge pull request #647 from H7GhosT/feature/create-managed-bot

Create managed bot keyboard action

#webk
🫑3
UnigramDev/Unigram/develop β€’ 20ea209 β€’ 1 files, +32/-1
Support anchors in markdown

UnigramDev/Unigram/develop β€’ dbe8412 β€’ 1 files, +6/-3
Allow selection in IV code blocks

UnigramDev/Unigram/develop β€’ 1fae5e0 β€’ 2 files, +14/-2
Improve instant view title

UnigramDev/Unigram/develop β€’ d532e6a β€’ 7 files, +137/-18
Recognize QR codes in pictures

UnigramDev/Unigram/develop β€’ 15484a9 β€’ 1 files, +4/-1
Improve checkbox in instant view

UnigramDev/Unigram/develop β€’ ee44d43 β€’ 2 files, +10/-0
Track error

UnigramDev/Unigram/develop β€’ d2b844c β€’ 1 files, +1/-1
Bump version to 12.7.4

UnigramDev/Unigram/develop β€’ b84aac4 β€’ 2 files, +9/-0
Handle QR code clicks

#unigram
🫑2
morethanwords/tweb/master β€’ 2208738 β€’ 1 files, +10/-4
fix: #223 draft sync loop when remote client clears draft

morethanwords/tweb/master β€’ eaafbc7 β€’ 1 files, +3/-0
fix: preserve actively-typed draft when a remote clear arrives

Refines the #223 fix: the draft_updated listener cleared the pending
saveDraft timeout before setDraft checked isDebounced(), so a remote
clear arriving while the user was typing would clobber their newer
input. Check isDebounced() first and bail when a local save is pending,
letting the in-progress draft win and sync normally.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

morethanwords/tweb/master β€’ f5f9e83 β€’ 1 files, +13/-4
Merge pull request #648 from hmnd/push-vyvvuzymxyls

fix: #223 draft sync loop when remote client clears draft

#webk
🫑3🀨1
UnigramDev/Unigram/develop β€’ d82aad2 β€’ 2 files, +40/-3
Fix profile settings navigation

UnigramDev/Unigram/develop β€’ 4e12044 β€’ 1 files, +1/-1
Fix null ref

#unigram
🫑3
morethanwords/tweb/master β€’ 871fc5e β€’ 14 files, +246/-108
fix: group + conference calls β€” DTLS role, e2e recv/key/video send, mirror, rejoin

Group voice chats (SFU):
- DTLS: advertise setup:passive so the SFU drives the handshake. A Chrome ~M124
DTLS change broke the client-active direction β€” ICE reached connected but the
handshake stalled, so no SRTP keys and no media. (processMediaSection)

Conference calls (TdE2E) β€” enabled (IS_CONFERENCE_CALL_SUPPORTED=true):
- recv: attach the e2e RTCRtpScriptTransform per remote SSRC at createTransceiver
time, before the decoder binds (the track event is too late β†’ Chrome bypasses).
Drop the single-multiplexed-m-line model; one recvonly m-line per SSRC like the
legacy SFU path. Frames now pump 1:1.
- key: gate the v1+ group-shared-key HMAC mixing on group_state.version() like
tdlib (real calls run at version 0) β€” fixes MAC verification failures vs iOS.
- video send: keep the VP8 codec header in a per-frame plaintext prefix
(libtgcalls calculateVp8FramePlaintextHeaderSize) instead of encrypting it.
- screen share: attach the e2e send transform on the presentation connection
(its own e2e channel); it was being sent unencrypted.

Calls UI:
- mirror only the local self-view from a front camera; never the remote feed or
screen capture (getDisplayMedia/displaySurface).

Re-join: reset the participant-fetch cursor on leave AND join so re-joining the
same call re-fetches participants β€” fixes empty popup + no video on rejoin
(incl. after reload, where the SharedWorker keeps stale state).

Cleanups: shared senderKind helper, named e2e channel constants, gate e2e worker
debug instrumentation behind E2E_DEBUG, remove dead attachE2eTransforms.

morethanwords/tweb/master β€’ b0f3f20 β€’ 8 files, +356/-336
Some icons

morethanwords/tweb/master β€’ 6fee2d4 β€’ 1 files, +13/-4
Merge branch 'master' of https://github.com/morethanwords/tweb

morethanwords/tweb/master β€’ 735f656 β€’ 15 files, +1695/-304
feat: My QR code β€” iOS-style profile QR card with theme picker

Add a "My QR code" popup that renders your (or any peer's) profile QR as an
iOS-faithful card β€” avatar + QR + @username over a chat wallpaper β€” painted on a
single canvas and copyable as a 1170Γ—2532 PNG (with a profile-link fallback when
image-clipboard is unavailable).

- QR painted via a shared paintQrCode helper (qr-code-styling), tinted with the
wallpaper gradient and luminance-clamped so it stays scannable on light
themes; SignQRCard now uses the same helper instead of its own copy.
- Reusable ChatThemesPicker extracted (also adopted by generalSettings) with a
popup-local night-mode toggle; selection persisted in appSettings.qrCode
(selectedThemeId + nightMode).
- Entry points: Settings header (self), PeerProfile username + private
invite-link rows; usernameless self falls back to a t.me/contact token
(appUsersManager.exportContactToken), mirroring iOS.
- color.ts: shared getWallPaperColors + WCAG luminance helpers; fix
filter(Boolean) dropping a present black (0x000000) wallpaper stop β€” now keeps
every present stop like Telegram-iOS.

#webk
🫑3
morethanwords/tweb/master β€’ ff9288b β€’ 14 files, +301/-104
feat: conference-call join entry points (link/invite/pinned/preview)

Funnel every "join a conference" affordance through one policy entry
point β€” appImManager.joinConference, which owns the support gate, the
same-call short-circuit, the leave-current-call confirmation and the
dead-link toast:

- t.me/call/<slug> link, the invite service-message anchor and the new
telegram_call web-page preview (chat bubble + pinned bar) all delegate
to it instead of re-implementing the gate + error handling
- joinConference now leaves any current call (1-on-1, live, group or
another conference) via discardCurrentCall before joining, mirroring
joinGroupCall/joinLiveStream; adds a `Conference` confirmation toType
so the prompt never names an empty peer
- joinVoiceChatAnchor imports joinConference lazily β€” a static import
closes an appImManager↔render-path cycle that crashes page load with a
`Row` TDZ ("Cannot access 'Row' before initialization")

Conference UX (no backing chat peer):
- topbar stacks participant avatars instead of a chat avatar, refreshed
on participant join/leave; fix a string-vs-number group-call id compare
that froze the participant count at its connect-time value
- groupCallInstance nudges a re-render once the real groupCall hydrates
late (invitee/slug joins) so the count doesn't stick at 1
- PopupGroupCall places the e2e fingerprint badge left of fullscreen

Schema: add the `telegram_call` WebPage type.

#webk
🫑3
morethanwords/tweb/brave-spence-c3c9ac β€’ 5364b6f β€’ 14 files, +2296/-535
feat: round video message recording (ΠΊΡ€ΡƒΠΆΠΊΠΈ)

Record and send round video notes, matching iOS/Android (400Γ—400, 30fps).

- NativeVideoRecorder: getUserMedia -> center-cropped 400x400 <canvas> ->
captureStream -> MediaRecorder (mp4), plus a parallel webm recorder backing
the paused-preview snapshot (Chrome's mp4 MediaRecorder emits no mid-stream
data). rAF draw loop (rVFC never fires for the off-DOM source video), capped
to the capture frame rate.
- VideoRecordingPanel + ProgressRing (Solid .tsx): 360x360 centered camera
circle with the shared progress ring, first-frame reveal, mirror/un-mirror,
opacity fade-out on send/cancel (no black frame). The panel exposes an
imperative handle via createRoot, capturing real DOM nodes through refs so the
dev-mode $$component HMR wrapper doesn't break wrappers/video.ts.
- Reuses the existing voice recording panel (trash / waveform / timer / pause /
preview / send) in place. Click-to-record; voice<->video switch via
right-click, left-button long-press, and the attach menu; 60s cap -> paused
preview + toast (no auto-send); poster thumbnail for the optimistic bubble.
- Extracts ALL recording machinery (voice + video) out of ChatInput into a
ChatRecording collaborator - input.ts shrinks ~1166 lines.
- Camera + microphone follow the user's Settings -> Speakers and Camera choice
through the shared getStream() chokepoint, inheriting its self-healing
fallback (stale device -> strip deviceId, clear the setting, retry on default).
- Gated off on Safari/iOS (broken canvas.captureStream, WebKit #181663) ->
falls back to voice.
- CLAUDE.md: document the "use getStream for any getUserMedia" rule.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

morethanwords/tweb/brave-spence-c3c9ac β€’ 2809885 β€’ 242 files, +15276/-4733
Merge branch 'master' into brave-spence-c3c9ac

#webk
🫑3
morethanwords/tweb/master β€’ ab756cc β€’ 14 files, +2296/-534
Merge pull request #652 from morethanwords/brave-spence-c3c9ac

feat: round video message recording (ΠΊΡ€ΡƒΠΆΠΊΠΈ)

#webk
🫑3
morethanwords/tweb/master β€’ caf4d1d β€’ 18 files, +350/-274
feat: bot web_app_request_chat Mini App peer-request flow
feat: round-video record button icon; dedupe record switch
feat: darken folders-sidebar mirror for night dark patterns
fix: folders-sidebar burger falls back to menu below 925px
fix: drop trailing zero wallpaper gradient stops (day themes)
fix: keep reveal scroll animation when forwarding tall message
fix: honour forced draft clear after send-while-typing
fix: topbar search filter button spacing
chore: remove gated conference-call topbar button

#webk
🫑3
morethanwords/tweb/master β€’ e8b1603 β€’ 1 files, +1/-1
Adapt wording if photo or video permission is missing

morethanwords/tweb/master β€’ 4e96ae0 β€’ 10 files, +588/-4
Merge remote-tracking branch 'official/master' into feature/new-polls

morethanwords/tweb/master β€’ 8728e14 β€’ 3 files, +2/-2
Move truncateTextWithEntities

morethanwords/tweb/master β€’ 6bc8b65 β€’ 4 files, +151/-50
Refactor adding options logic

morethanwords/tweb/master β€’ 7f77d2c β€’ 1 files, +19/-15
Adjust poll options field behavior

morethanwords/tweb/master β€’ 53bed64 β€’ 8 files, +177/-26
Confirm poll cancelation when trying to cancel media upload

morethanwords/tweb/master β€’ eebb3f8 β€’ 3 files, +59/-6
fix: stop dev server crashing with EMFILE and speed up dev

`pnpm start` crashed on macOS with "EMFILE: too many open files, watch" β€”
the dev file watchers recursed into the ~18 git worktrees under .claude/
(~40k dirs, each with its own node_modules). Pre-bundling was also silently
disabled (the dep scan choked on stale public/*.js merge-conflict markers)
and re-run from scratch on every start.

Crash / watcher fixes:
- tsconfig: add watchOptions.excludeDirectories (+ useFsEvents) and exclude
.claude, so tsc --watch (run by vite-plugin-checker) stops watching the
worktrees and node_modules
- vite: ignore **/.claude/** in the dev server watcher
- vite: scope the checker's ESLint watcher to src/ via watchPath β€” its default
watches the project root and never prunes directories

Dev performance:
- vite: pin optimizeDeps.entries to index.html so the dep scan no longer globs
stale public/*.js / stats.html and pre-bundling works again
- package.json: drop `vite --force` from start/start-in-docker so the dep
pre-bundle cache persists across restarts
- vite: only run rollup-plugin-visualizer under ANALYZE=1
- vite: serve dev over HTTP/2 when certs/localhost*.pem exists, multiplexing the
per-module dev requests (off for the preview and when no cert is present)

morethanwords/tweb/master β€’ 989f8f5 β€’ 16 files, +337/-81
Merge pull request #650 from H7GhosT/feature/new-polls

Refactor adding options logic and add poll canceling confirmation

#webk
🫑3
morethanwords/tweb/master β€’ c19b21b β€’ 1 files, +3/-1
fix: sort selected messages by time before copying (#357)

morethanwords/tweb/master β€’ 37ff0b8 β€’ 1 files, +11/-1
feat: handle url and alert in bot callback answer (#274)

morethanwords/tweb/master β€’ 1020a7d β€’ 3 files, +132/-40
Check video support and max size before opening media editor

morethanwords/tweb/master β€’ 1b0a8e7 β€’ 1 files, +16/-1
Invoke add poll answer only after message is sent

morethanwords/tweb/master β€’ 1c24060 β€’ 6 files, +35/-21
Check whether video encoding is supported before rendering
MediaAttachment

morethanwords/tweb/master β€’ 1e726af β€’ 12 files, +52/-36
refactor: unify left-sidebar dock boundary at 925px, clamp chat width

morethanwords/tweb/master β€’ cbd6854 β€’ 2 files, +43/-42
fix: send as menu layout

morethanwords/tweb/master β€’ 59dc380 β€’ 1 files, +16/-1
Merge pull request #654 from H7GhosT/fix/invoke-add-poll-answer-after-message

Invoke add poll answer only after message is sent

morethanwords/tweb/master β€’ de399ea β€’ 7 files, +154/-48
Merge pull request #653 from H7GhosT/fix/create-poll-media-editor-limit

Check video support and max size before opening media editor

#webk
🫑3
morethanwords/tweb/master β€’ 8f2592a β€’ 26 files, +473/-427
refactor: port createContact & reportAd popups to procedural Solid API

- showCreateContactPopup() / showReportAdPopup() + showAd/Message/StoryReport helpers
- add `old` PopupElement flag for legacy styling
- extract _createContact.scss, drop old _mediaAttacher rules
- stars: reorder header, reveal more-options via GrowHeightReveal
- misc: addboost icon, sticker forwards class, surface-color tweaks

#webk
🫑3
morethanwords/tweb/master β€’ 396b25a β€’ 8 files, +71/-154
refactor: port aboutAd popup to procedural featureDetails API

#webk
🫑3
Ajaxy/telegram-tt/master β€’ b78f86e β€’ 31 files, +727/-168
Layer: Support layer 225

Ajaxy/telegram-tt/master β€’ 9dced4c β€’ 3 files, +4/-4
12.0.29

Ajaxy/telegram-tt/master β€’ d1597b4 β€’ 1 files, +9/-0
Forum Panel: Fix chatlist animation on close (#6956)

Ajaxy/telegram-tt/master β€’ fcf7b45 β€’ 5 files, +10/-4
Fix stricterdom for lovely-chart (#6957)

Ajaxy/telegram-tt/master β€’ 1c9d35c β€’ 4 files, +54/-16
Avoid innerHTML for lovely-chart text (#6958)

Ajaxy/telegram-tt/master β€’ ec9add5 β€’ 17 files, +227/-87
Sync lovely-chart from upstream (#6959)

Ajaxy/telegram-tt/master β€’ c4b1bad β€’ 3 files, +47/-2
Poll: Handle unread votes update (#6951)

Ajaxy/telegram-tt/master β€’ 60f3995 β€’ 105 files, +2223/-1985
Settings: Redesign (#6922)

Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>

Ajaxy/telegram-tt/master β€’ b7e1050 β€’ 14 files, +93/-25
Message: Show guest bots (#6955)

Ajaxy/telegram-tt/master β€’ 6a8ca9b β€’ 5 files, +17/-5
Message: Allow empty typing drafts (#6954)

Ajaxy/telegram-tt/master β€’ a103f09 β€’ 1 files, +7/-3
Comments: Fix wrong thread info on forwards (#6962)

Ajaxy/telegram-tt/master β€’ 2b6fca1 β€’ 12 files, +331/-112
Message List: Move streaming responses to the top (#6924)

Ajaxy/telegram-tt/master β€’ 198da47 β€’ 2 files, +46/-15
Message List: Fix selection buttons not showing (#6960)

Ajaxy/telegram-tt/master β€’ e6ba963 β€’ 2 files, +22/-10
Calls: Discard incoming calls as busy when already in a call (#6952)

Ajaxy/telegram-tt/master β€’ 37c3156 β€’ 2 files, +36/-0
Forward Modal: Send from forward modal on Enter key (#6964)

#webz
🫑2