This is the documentation repo for MadelineProto.
danog / madelineprotodocs Goto Github PK
View Code? Open in Web Editor NEWAsync PHP client/server API for the telegram MTProto protocol
Home Page: https://docs.madelineproto.xyz
Async PHP client/server API for the telegram MTProto protocol
Home Page: https://docs.madelineproto.xyz
This is the documentation repo for MadelineProto.
my code is:
<?php
namespace App\Events;
use danog\MadelineProto\EventHandler;
use danog\MadelineProto\RPCErrorException;
use danog\MadelineProto\Magic;
use danog\MadelineProto\Shutdown;
class TelegramEventHandler extends EventHandler
{
const Report = "xxxx"; //Admin Username
const Admins = [xxxx]; //Admin UserID
private string $time;
public function onStart()
{
$this->time = time();
}
public function getReportPeers(): array
{
return [self::Report];
}
public function onUpdateNewMessage(array $update)
{
if ($update['message']['_'] !== 'message' || $update['message']['date'] <= $this->time) {
return;
}
try {
$message = $update['message'];
$msgId = $message['id'] ?? null;
$isOut = $message['out'] ?? false;
$text = $message['message'] ?? '';
$fromId = $message['from_id']['user_id'] ?? null;
$replyTo = $message['reply_to']['reply_to_msg_id'] ?? null;
$peer = $this->getID($update);
if (in_array($fromId, self::Admins)) {
if (isset($update['message']['media']['_']) && $update['message']['media']['_'] !== 'messageMediaWebPage') {
$this->messages->sendMessage([
'peer' => $peer,
'message' => 'Please enter the file name:',
'reply_to_msg_id' => $msgId,
]);
// Wait for the user to reply with the file name
$response = $this->messages->getMessages([
'id' => [$msgId],
'min_id' => $msgId,
'wait_time' => 30, // Wait for 30 seconds
]);
if (isset($response['messages'][0]['message'])) {
$fileName = $response['messages'][0]['message'];
// Save the file with the provided file name
$this->downloadToFile($update, storage_path('app/' . $fileName));
} else {
$this->messages->sendMessage([
'peer' => $peer,
'message' => 'Sorry, I did not receive a file name. Please try again.',
'reply_to_msg_id' => $msgId,
]);
}
}
}
} catch (RPCErrorException $e) {
$this->report($e->rpc);
$this->logger($e);
}
}
}
$settings = new Settings;
$settings->getLogger()->setLevel(Logger::LEVEL_ULTRA_VERBOSE);
MP::startAndLoopBot('session', 'token', $settings);
But I get this error:
\danog\MadelineProto\Exception: isset is not supported, please yield the entire Coroutine first!
how do? please guide me.
why madeline.php and... will copy in root folder and public_html\folder?
and this error in line 100
if (\strpos($contents, 'new \danog\MadelineProto\Server') && \in_array($contents, [\file_get_contents('https://github.com/danog/MadelineProtoPhar/raw/2270bd9a94d168a5e6731ffd7e61821ea244beff/mtproxyd'), \file_get_contents('https://github.com/danog/MadelineProtoPhar/raw/7cabb718ec3ccb79e3c8e3d34f5bccbe3f63b0fd/mtproxyd')]) && ($mtproxyd = \file_get_contents('https://phar.madelineproto.xyz/mtproxyd?v=new'))) {
\file_put_contents($file, $mtproxyd);
return;
}
I am strugling to use Method: auth.signIn() but I have no ide how to generate one of it's parameter called phone_code_hash
this is the usage of the method above from official documentation https://docs.madelineproto.xyz/API_docs/methods/auth.signIn.html
_$auth_Authorization = $MadelineProto->auth->signIn(['phone_number' => 'string', 'phone_code_hash' => 'string', 'phone_code' => 'string', ]);
please help me to properly generate phone_code_hash in madeline proto @danog
hi i have url i get from api , it's allow me to use it only from the server who did request it .
it's kind weird , but here is the case:
when i use curl and do file_get_contents ,
its work fine but when use \danog\MadelineProto\FileCallback , exceptions does not show me anything.
even madelineproto.log file is not.
they bot same url .
this work :
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
$query = file_get_contents($url);
curl_close($curl_handle);
echo $query;
this not work
$peer = '@any';
new \danog\MadelineProto\FileCallback(
$url,
function ($progress, $speed, $time) use ($MadelineProto, $peer) {
try {
yield $MadelineProto->messages->sendMessage(['peer' => $peer, 'message' => "Upload progress: $progress%\nSpeed: $speed mbps\nTime elapsed since start: $time"]);
} catch (\Throwable $e) {
print_r($e); // this not show anything even madelineproto.log say everythig good .
}
}
);
both same url .
exception does not show me anything ?
can someone help ?
Be Aware that i have this issue only with some urls that they not working with madeline.
my class that i use :
class MyCallback implements \danog\MadelineProto\FileCallbackInterface
{
private $file;
private $peer;
private $id;
private $byte;
private $MadelineProto;
private $prev;
public function __construct($file, $peer, $id, $byte, $MadelineProto)
{
$this->file = $file;
$this->peer = $peer;
$this->id = $id;
$this->byte = $byte;
$this->MadelineProto = $MadelineProto;
}
public function getFile()
{
return $this->file;
}
public function __invoke($progress, $speed, $time)
{
try {
if ($speed != 0 && isset($this->byte)) {
$content = "\nspeed: " . $speed . " M/s 🔺\ntime: " . gmdate("H:i:s", $time) . " ▫️\nsize: " . (float) number_format($this->byte / 1048576, 4) . ' MB ⏎';
} else {
$content = null;
}
$now = \time();
if ($now - $this->prev < 5 && $progress < 100) {
return;
}
$this->prev = $now;
yield $this->MadelineProto->messages->editMessage(['peer' => $this->peer, 'id' => $this->id, 'message' => "<b>Progress: " . (int) $progress . '% 🔝' . $content . "</b>", 'parse_mode' => 'html']);
} catch (Exception $e) {
print_r($e); // this also not give anything ?
}
}
}
Hey
Hey,
My problem is when I use messages.getPeerDialogs and give it an array of usernames, when there is a unoccupied username between them it will return an error but it doesn't specify which username is making it returning this error, any idea what should I do?
Thank you
The Page in the documentation:
https://docs.madelineproto.xyz/API_docs/methods/channels.editBanned.html
States that this function can be used by a Bot, however it seems that it can not be used by a bot as I get BOT_METHOD_INVALID as exception.
Is this a issue in my code or is the documentation wrong?
Why does this error occur?
code:
$MadelineProto->messages->startBot([
'bot' => '@SpamBot',
'start_param' => 'string'
]);
log:
Serialization: Connected to IPC socket!
Exception: Telegram returned an RPC error: Invalid message ID provided (400) (MSG_ID_INVALID), caused by phar...
Revision: aeed13260f3a397f11564a1cfb706e25663422db-74
TL trace:
Client.php(237): __call("methodCallAsyncRead",["messages.startBot",{"bot":"@SpamBot","start_param":"string"},{"apifactory":true}])
AbstractAPIFactory.php(183): methodCallAsyncRead("messages.startBot",{"bot":"@SpamBot","start_param":"string"},{"apifactory":true})
__call_async()
Previous TL trace:
['messages.startBot']
CallHandler.php(59): methodCallAsyncRead("messages.startBot",{"bot":"@SpamBot","start_param":"string"},{"apifactory":true})
Server.php(241): methodCallAsyncRead("messages.startBot",{"bot":"@SpamBot","start_param":"string"},{"apifactory":true})
clientRequest()
Previous TL trace:
['messages.startBot']
ResponseHandler.php(185): handleRpcError({},{"_":"rpc_error","error_code":400,"error_message":"MSG_ID_INVALID"})
ResponseHandler.php(67): handleResponse({})
Driver.php(102): handleMessages("hjxt",null)
Driver.php(61): tick()
Loop.php(87): run()
Tools.php(313): run({})
entry.php(99): wait({})
entry.php(122): {closure}()
Hi. It is great job. But I can not use getLocated
$MadelineProto = new \danog\MadelineProto\API('session.madeline'); $MadelineProto->start(); $inputGeoPoint = ['_' => 'inputGeoPoint', 'lat' => 55.753930, 'long' => 37.615714]; $location = $MadelineProto->contacts->getLocated(['background'=> false, 'geo_point' => $inputGeoPoint, 'self_expires' => 0]); dd($location);
But return error : INVALID INPUT
array:7 [▼ "_" => "updates" "updates" => [] "users" => [] "chats" => [] "date" => 1611055246 "seq" => 0 "request" => array:12 [▼ "apifactory" => true "datacenter" => 2 "_" => "contacts.getLocated" "type" => "Updates" "contentRelated" => true "promise" => Amp\Deferred {#3975 ▶} "method" => true "unencrypted" => false "body" => array:3 [▼ "background" => false "geo_point" => array:3 [▼ "_" => "inputGeoPoint" "lat" => 55.75393 "long" => 37.615714 ] "self_expires" => 0 ] "serialized_body" => b"D¼HÓ\x01\x00\x00\x00ɬ·ó”¼:Ç€àK@<Øb·ÏÎB@\x00\x00\x00\x00"(INVALID INPUT) "sent" => 1611055247 "tries" => 0 ] ]
MadelineProtoDocs/docs/docs/FEATURES.md
The links there doesn't work ("See here for instructions" and "Clickable inline buttons!")
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.