steavy29 / Telegram.Net

Telegram (http://telegram.org) client library implemented in C#.
17 stars 6 forks source link

How to set message as read? #32

Closed romi4rd1 closed 7 years ago

romi4rd1 commented 7 years ago

I added class "ReadMessageRequest" like this:

using System.Collections.Generic;
using System.IO;
using Telegram.Net.Core.MTProto;

namespace Telegram.Net.Core.Requests
{
    public class ReadMessagesRequest : MtProtoRequest
    {
        public readonly List<int> messageIdsToRead;
        public List<int> readMessageIds { get; private set; }

        public ReadMessagesRequest(List<int> messageIdsToRead)
        {
            this.messageIdsToRead = messageIdsToRead;
        }

        protected override uint requestCode => 0xc6649e31;

        public override void OnSend(BinaryWriter writer)
        {
            writer.Write(requestCode);
            TLObject.WriteVector(writer, messageIdsToRead, writer.Write);
        }

        public override void OnResponse(BinaryReader reader)
        {
            readMessageIds = TLObject.ReadVector(reader, reader.ReadInt32);
        }

        public override bool isContentMessage => true;
    }
}

Then i tried code like this to set message as read:

private async void btnSetMessageRead_Click(object sender, EventArgs e)
{
     List<int> fmsgid = new List<int>();
     fmsgid.Add(14);
     var setreadmessage = new ReadMessagesRequest(fmsgid);
     await client.SendRpcRequest(setreadmessage);
}

but i got Unhandled exception : "BadRequest - INPUT_METHOD_INVALID" please how to resolve it? thx...

steavy29 commented 7 years ago

The code you've used is incorrect. This is code of updateReadMessages constructor. updateReadMessages#c6649e31 messages:Vector pts:int = Update; And you're trying to use it like method.

See this: https://core.telegram.org/schema

romi4rd1 commented 7 years ago

In other cases i tried DeleteMessageRequest that is already in Library that same as ReadMessageRequest method :

using System.Collections.Generic;
using System.IO;
using Telegram.Net.Core.MTProto;

namespace Telegram.Net.Core.Requests
{
    public class DeleteMessagesRequest : MtProtoRequest
    {
        public readonly List<int> messageIdsToDelete;
        public List<int> deletedMessageIds { get; private set; }

        public DeleteMessagesRequest(List<int> messageIdsToDelete)
        {
            this.messageIdsToDelete = messageIdsToDelete;
        }

        protected override uint requestCode => 0x14f2dd0a;

        public override void OnSend(BinaryWriter writer)
        {
            writer.Write(requestCode);
            TLObject.WriteVector(writer, messageIdsToDelete, writer.Write);
        }

        public override void OnResponse(BinaryReader reader)
        {
            deletedMessageIds = TLObject.ReadVector(reader, reader.ReadInt32);
        }

        public override bool isContentMessage => true;
    }
}

i tried code like this:

        private async void btnDeleteMessage_Click(object sender, EventArgs e)
        {
            List<int> fmsgid = new List<int>();
            fmsgid.Add(14);
            var deletemessage = new DeleteMessagesRequest(fmsgid);
            await client.SendRpcRequest(deletemessage);
        }

then message was deleted (success).

i think the causes in this line:

protected override uint requestCode => 0xc6649e31;  //(ReadMessagesRequest) = failed
protected override uint requestCode => 0x14f2dd0a;  //(DeleteMessagesRequest) = successfully

"0xc6649e31" is Inconsequential requestCode, that is don't know is true or bad code

steavy29 commented 7 years ago

In order to implement your Request, you should look at "---functions---" section of https://core.telegram.org/schema

romi4rd1 commented 7 years ago

oh,. understand now,. by the way i chaged like this:

protected override uint requestCode => 0xc6649e31;  
// to: 
protected override uint requestCode => 0x354b5bc2; 

then successfully...
thanks a lot Mr. @steavy29

steavy29 commented 7 years ago

Uw.