
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Voice chats, private incoming and outgoing calls in Telegram for Developers
Examples
•
Documentation
•
Channel
•
Chat
This project consists of two main parts: tgcalls, pytgcalls. The first is a C++ Python extension. The second uses the extension along with MTProto and provides high level SDK. All together, it allows you to create userbots that can record and broadcast in voice chats, make and receive private calls.
from fipper import Client, filters
from fipper.utils import MAX_CHANNEL_ID
from pytgcalls import GroupCallFactory
app = Client('pytgcalls')
group_call = GroupCallFactory(app).get_file_group_call('input.raw')
@group_call.on_network_status_changed
async def on_network_changed(context, is_connected):
chat_id = MAX_CHANNEL_ID - context.full_chat.id
if is_connected:
await app.send_message(chat_id, 'Successfully joined!')
else:
await app.send_message(chat_id, 'Disconnected from voice chat..')
@app.on_message(filters.outgoing & filters.command('join'))
async def join_handler(_, message):
await group_call.start(message.chat.id)
app.run()
from telethon import TelegramClient, events
from pytgcalls import GroupCallFactory
app = TelegramClient('pytgcalls', api_id, api_hash).start()
group_call_factory = GroupCallFactory(app, GroupCallFactory.MTPROTO_CLIENT_TYPE.TELETHON)
group_call = group_call_factory.get_file_group_call('input.raw')
@app.on(events.NewMessage(outgoing=True, pattern=r'^/join$'))
async def join_handler(event):
chat = await event.get_chat()
await group_call.start(chat.id)
app.run_until_disconnected()
GroupCallRaw
, example with pyav,
example of restreaming)
— to send and receive data in bytes
directly from Python.GroupCallFile
, playout example,
recording example)
— to use audio files including named pipe (FIFO).GroupCallDevice
, example) —
to use system virtual devices. Please don't use it with real microphone, headphones, etc.Note: All audio data is transmitted in PCM 16 bit, 48k. Example how to convert files using FFmpeg.
pip3 install -U pytgcalls[pyrogram]
pip3 install -U pytgcalls[telethon]
The first part of the project is C++ extensions for Python. Pybind11 was used to write it. Binding occurs to the tgcalls library by Telegram, which is used in all official clients. To implement the binding, the code of Telegram Desktop and Telegram Android was studied. Changes have been made to the Telegram library. All modified code is available as a subtree in this repository. The main ideas of the changes is to improve the sound quality and to add ability to work with third party audio device modules. In addition, this binding implemented custom audio modules. These modules are allowing transfer audio data directly from Python via bytes, transfer and control the playback/recording of a file or a virtual system device.
Short answer for Linux:
git clone git@github.com:MarshalX/tgcalls.git --recursive
cd tgcalls
For x86_64:
docker-compose up tgcalls_x86_64
For AArch64 (ARM64):
docker-compose up tgcalls_aarch64
Python wheels will be available in dist
folder in root of tgcalls
.
More info:
Also, you can investigate into manylinux GitHub Actions builds.
Temporarily, instead of documentation, you can use an example along with MTProto.
Documentation
•
PyPi
•
Sources
This project is implementation of using tgcalls Python binding together with MTProto. By default, this library are supports Fipper and Telethon clients for working with Telegram Mobile Protocol. You can write your own implementation of abstract class to work with other libraries.
Visit this page to discover the official examples.
pytgcalls
's documentation lives at tgcalls.org.
RAW files are now used. You will have to convert to this format yourself using ffmpeg. The example how to transcode files from a code is available here.
From mp3 to raw (to play in voice chat):
ffmpeg -i input.mp3 -f s16le -ac 2 -ar 48000 -acodec pcm_s16le input.raw
From raw to mp3 (files with recordings):
ffmpeg -f s16le -ac 2 -ar 48000 -acodec pcm_s16le -i output.raw clear_output.mp3
For playout live stream you can use this one:
ffmpeg -y -i http://stream2.cnmns.net/hope-mp3 -f s16le -ac 2 -ar 48000 -acodec pcm_s16le input.raw
For YouTube videos and live streams you can use youtube-dl:
ffmpeg -i "$(youtube-dl -x -g "https://youtu.be/xhXq9BNndhw")" -f s16le -ac 2 -ar 48000 -acodec pcm_s16le input.raw
And set input.raw as input filename.
You can get help in several ways:
Contributions of all sizes are welcome.
You may copy, distribute and modify the software provided that modifications are described and licensed for free under LGPL-3. Derivatives works (including modifications or anything statically linked to the library) can only be redistributed under LGPL-3, but applications that use the library don't have to be.
FAQs
a Python binding for tgcalls C++ library
We found that tg-music demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.