Код: Выделить всё
public MessageMedia MediaMSG=null;
....
Manager = client.WithUpdateManager(Client_OnUpdate/*, "Updates.state"*/);
var dialogs = .client.Messages_GetAllDialogs(); // dialogs = groups/channels/users
dialogs.Wait();
dialogs.Result.CollectUsersChats(Manager.Users, Manager.Chats);
/***/
private async Task Client_OnUpdate(Update update) {
switch (update)
{ case UpdateNewMessage unm:
await HandleMessage(unm.message);
break;
}
}
/***/
private Task HandleMessage(MessageBase messageBase, bool edit = false)
{
switch (messageBase)
{
case TL.Message m:
InputPeer peer = null;
//set peer a value for example user or chat
//peer =.....
Task PostResult = null;
CancellationTokenSource cancellationSource = new CancellationTokenSource();
CancellationToken cancellation = cancellationSource.Token;
MediaMSG = m.media;
MessageMediaPhoto d = null;
if (MediaMSG.GetType() == typeof(MessageMediaPhoto))
{
d=new MessageMediaPhoto();
d.flags = ((MessageMediaPhoto)MediaMSG).flags;
d.photo = ((MessageMediaPhoto)MediaMSG).photo;
d.ttl_seconds= ((MessageMediaPhoto)MediaMSG).ttl_seconds;
MessageBox.Show(d.flags.ToString() + ":" + d.photo.ID + " :" + d.ttl_seconds+":"+ m.flags.ToString());
File.WriteAllText("a.txt", d.flags.ToString() + ":" + d.photo.ID + " :" + d.ttl_seconds + ":" + m.flags.ToString());
}
PostResult = client.SendMessageAsync(peer, m.message, d?.ToInputMedia());
PostResult.Wait(cancellation);
break;
case MessageService ms: /*Console.WriteLine($"{Peer(ms.from_id)} in {Peer(ms.peer_id)} [{ms.action.GetType().Name[13..]}]");*/ break;
}
return Task.CompletedTask;
}
Это не конкретное сообщение, а любое сообщение с медиаУзел инициализируется успешно, потому что, когда входящее сообщение представляет собой текстовое сообщение, оно отправлено успешно, но когда входящее сообщение содержит носитель, оно вызывает исключение MEDIA_EMPTY,
носитель не имеет значения NULL, даже если он имеет значение NULL, не должно вызывать исключение, поскольку носитель необязательный аргумент и по умолчанию принимает значение null, клиент.SendMessageAsync отправляет медиафайл через:
Код: Выделить всё
client.Messages_SendMedia(peer, m.media.ToInputMedia(), m.message,Helpers.RandomLong());
Код: Выделить всё
client.Messages_SendMedia(peer, m.media.ToInputMedia(), m.message,Helpers.RandomLong());
Код: Выделить всё
d.flags : has_photo
d.photo.ID : 5949672085112603217
d.ttl_seconds : 0
m.flags : has_from_id, has_media, has_replies
Код: Выделить всё
var filename = $"{d.photo.ID}.jpg";
var fileStream = File.Create(filename);
var type = client.client.DownloadFileAsync((Photo)d.photo, fileStream);
type.Wait();
fileStream.Close();
я тестировал его в публичном и приватном чате, но исключение все равно
Код: Выделить всё
400
MEDIA_EMPTY
The provided media object is invalid
Подробнее здесь: https://stackoverflow.com/questions/785 ... legramclie