diff --git a/examples/bot.php b/examples/bot.php
index c6abe669f..47938ea3f 100755
--- a/examples/bot.php
+++ b/examples/bot.php
@@ -74,20 +74,19 @@ class MyEventHandler extends EventHandler
/**
* Initialization logic.
*/
- public function onStart()
+ public function onStart(): void
{
$this->logger("The bot was started!");
- var_dump(yield $this->getFullInfo('MadelineProto'));
+ $this->logger($this->getFullInfo('MadelineProto'));
}
/**
* Handle updates from supergroups and channels.
*
* @param array $update Update
- * @return void
*/
- public function onUpdateNewChannelMessage(array $update): Generator
+ public function onUpdateNewChannelMessage(array $update): void
{
- return $this->onUpdateNewMessage($update);
+ $this->onUpdateNewMessage($update);
}
/**
@@ -95,7 +94,7 @@ class MyEventHandler extends EventHandler
*
* @param array $update Update
*/
- public function onUpdateNewMessage(array $update): Generator
+ public function onUpdateNewMessage(array $update): void
{
$this->logger($update);
@@ -106,9 +105,9 @@ class MyEventHandler extends EventHandler
/*
// Example code to json-dump all incoming updates (be wary of enabling it in chats)
$res = \json_encode($update, JSON_PRETTY_PRINT);
- yield $this->messages->sendMessage(['peer' => $update, 'message' => "$res
", 'reply_to_msg_id' => isset($update['message']['id']) ? $update['message']['id'] : null, 'parse_mode' => 'HTML']);
+ $this->messages->sendMessage(['peer' => $update, 'message' => "$res
", 'reply_to_msg_id' => isset($update['message']['id']) ? $update['message']['id'] : null, 'parse_mode' => 'HTML']);
if (isset($update['message']['media']) && $update['message']['media']['_'] !== 'messageMediaGame' && $update['message']['media']['_'] !== 'messageMediaWebPage') {
- yield $this->messages->sendMedia(['peer' => $update, 'message' => $update['message']['message'], 'media' => $update]);
+ $this->messages->sendMedia(['peer' => $update, 'message' => $update['message']['message'], 'media' => $update]);
}
*/
@@ -117,17 +116,16 @@ class MyEventHandler extends EventHandler
// Can be anything serializable, an array, an int, an object
$myData = [];
- // Use the isset method to check whether some data exists in the database
- if (yield $this->dataStoredOnDb->isset('yourKey')) {
- // Always yield when fetching data
- $myData = yield $this->dataStoredOnDb['yourKey'];
+ if (isset($this->dataStoredOnDb['yourKey'])) {
+ // Always when fetching data
+ $myData = $this->dataStoredOnDb['yourKey'];
}
$this->dataStoredOnDb['yourKey'] = $myData + ['moreStuff' => 'yay'];
$this->dataStoredOnDb['otherKey'] = 0;
unset($this->dataStoredOnDb['otherKey']);
- $this->logger("Count: ".(yield $this->dataStoredOnDb->count()));
+ $this->logger("Count: ".count($this->dataStoredOnDb));
// You can even use an async iterator to iterate over the data
foreach ($this->dataStoredOnDb as $key => $value) {
@@ -147,4 +145,4 @@ $settings->getLogger()->setLevel(Logger::LEVEL_ULTRA_VERBOSE);
// Reduce boilerplate with new wrapper method.
// Also initializes error reporting, catching and reporting all errors surfacing from the event loop.
-MyEventHandler::startAndLoop('uwua.madeline', $settings);
+MyEventHandler::startAndLoop('uwu.madeline', $settings);
diff --git a/src/danog/MadelineProto/InternalDoc.php b/src/danog/MadelineProto/InternalDoc.php
index 749861c7f..b59a2b39a 100644
--- a/src/danog/MadelineProto/InternalDoc.php
+++ b/src/danog/MadelineProto/InternalDoc.php
@@ -7625,6 +7625,14 @@ class InternalDoc extends APIFactory
{
$this->__call(__FUNCTION__, []);
}
+ /**
+ * Subscribe to event handler updates for a channel/supergroup we're not a member of.
+ *
+ */
+ public function subscribeToUpdates(mixed $channel)
+ {
+ return $this->__call(__FUNCTION__, [$channel]);
+ }
/**
* Convert TD to MTProto parameters.
*
diff --git a/src/danog/MadelineProto/MTProtoTools/UpdateHandler.php b/src/danog/MadelineProto/MTProtoTools/UpdateHandler.php
index 41619a306..5a15b539c 100644
--- a/src/danog/MadelineProto/MTProtoTools/UpdateHandler.php
+++ b/src/danog/MadelineProto/MTProtoTools/UpdateHandler.php
@@ -342,6 +342,34 @@ trait UpdateHandler
break;
}
}
+ /**
+ * Subscribe to event handler updates for a channel/supergroup we're not a member of.
+ *
+ * @return bool False if we were already subscribed
+ */
+ public function subscribeToUpdates(mixed $channel): bool
+ {
+ $channelId = $this->getInfo($channel, MTProto::INFO_TYPE_ID);
+ if (!MTProto::isSupergroup($channelId)) {
+ throw new Exception("You can only subscribe to channels or supergroups!");
+ }
+ $channelId = MTProto::fromSupergroup($channelId);
+ if (!$this->getChannelStates()->has($channelId)) {
+ $this->loadChannelState($channelId, ['_' => 'updateChannelTooLong', 'pts' => 1]);
+ $this->feeders[$channelId] ??= new FeedLoop($this, $channelId);
+ $this->updaters[$channelId] ??= new UpdateLoop($this, $channelId);
+ $this->feeders[$channelId]->start();
+ if (isset($this->feeders[$channelId])) {
+ $this->feeders[$channelId]->resume();
+ }
+ $this->updaters[$channelId]->start();
+ if (isset($this->updaters[$channelId])) {
+ $this->updaters[$channelId]->resume();
+ }
+ return true;
+ }
+ return false;
+ }
/**
* Save update.
*