Implemented CreateChat. Fixed MessageServiceConstructor - migrated it from api layer level 16 to 23.

This commit is contained in:
steavy29 2016-09-08 14:35:25 +03:00
parent 29568bef11
commit 98f014a49d
3 changed files with 77 additions and 31 deletions

View file

@ -351,7 +351,7 @@ namespace TLSharp.Core.MTProto
{0x83e5de54, typeof (MessageEmptyConstructor)}, {0x83e5de54, typeof (MessageEmptyConstructor)},
{0x567699B3, typeof (MessageConstructor)}, {0x567699B3, typeof (MessageConstructor)},
{0xa367e716, typeof (MessageForwardedConstructor)}, {0xa367e716, typeof (MessageForwardedConstructor)},
{0x9f8d60bb, typeof (MessageServiceConstructor)}, {0x1d86f70e, typeof (MessageServiceConstructor)},
{0x3ded6320, typeof (MessageMediaEmptyConstructor)}, {0x3ded6320, typeof (MessageMediaEmptyConstructor)},
{0xc8c45a2a, typeof (MessageMediaPhotoConstructor)}, {0xc8c45a2a, typeof (MessageMediaPhotoConstructor)},
{0xa2d24290, typeof (MessageMediaVideoConstructor)}, {0xa2d24290, typeof (MessageMediaVideoConstructor)},
@ -967,10 +967,9 @@ namespace TLSharp.Core.MTProto
media); media);
} }
public static Message messageService(int id, int from_id, Peer to_id, bool output, bool unread, int date, public static Message messageService(int flags, int id, int from_id, Peer to_id, int date, MessageAction action)
MessageAction action)
{ {
return new MessageServiceConstructor(id, from_id, to_id, output, unread, date, action); return new MessageServiceConstructor(flags, id, from_id, to_id, date, action);
} }
public static MessageMedia messageMediaEmpty() public static MessageMedia messageMediaEmpty()
@ -5394,34 +5393,27 @@ namespace TLSharp.Core.MTProto
} }
public class MessageServiceConstructor : Message public class MessageServiceConstructor : Message // messageService#1d86f70e flags:int id:int from_id:int to_id:Peer date:int action:MessageAction = Message;
{ {
public int flags;
public int id; public int id;
public int from_id; public int from_id;
public Peer to_id; public Peer to_id;
public bool output;
public bool unread;
public int date; public int date;
public MessageAction action; public MessageAction action;
public MessageServiceConstructor() public MessageServiceConstructor() { }
{
} public MessageServiceConstructor(int flags, int id, int from_id, Peer to_id, int date, MessageAction action)
public MessageServiceConstructor(int id, int from_id, Peer to_id, bool output, bool unread, int date,
MessageAction action)
{ {
this.flags = flags;
this.id = id; this.id = id;
this.from_id = from_id; this.from_id = from_id;
this.to_id = to_id; this.to_id = to_id;
this.output = output;
this.unread = unread;
this.date = date; this.date = date;
this.action = action; this.action = action;
} }
public override Constructor Constructor public override Constructor Constructor
{ {
get { return Constructor.messageService; } get { return Constructor.messageService; }
@ -5429,31 +5421,29 @@ namespace TLSharp.Core.MTProto
public override void Write(BinaryWriter writer) public override void Write(BinaryWriter writer)
{ {
writer.Write(0x9f8d60bb); writer.Write(0x1d86f70e);
writer.Write(this.flags);
writer.Write(this.id); writer.Write(this.id);
writer.Write(this.from_id); writer.Write(this.from_id);
this.to_id.Write(writer); this.to_id.Write(writer);
writer.Write(this.output ? 0x997275b5 : 0xbc799737);
writer.Write(this.unread ? 0x997275b5 : 0xbc799737);
writer.Write(this.date); writer.Write(this.date);
this.action.Write(writer); this.action.Write(writer);
} }
public override void Read(BinaryReader reader) public override void Read(BinaryReader reader)
{ {
this.flags = reader.ReadInt32();
this.id = reader.ReadInt32(); this.id = reader.ReadInt32();
this.from_id = reader.ReadInt32(); this.from_id = reader.ReadInt32();
this.to_id = TL.Parse<Peer>(reader); this.to_id = TL.Parse<Peer>(reader);
this.output = reader.ReadUInt32() == 0x997275b5;
this.unread = reader.ReadUInt32() == 0x997275b5;
this.date = reader.ReadInt32(); this.date = reader.ReadInt32();
this.action = TL.Parse<MessageAction>(reader); this.action = TL.Parse<MessageAction>(reader);
} }
public override string ToString() public override string ToString()
{ {
return String.Format("(messageService id:{0} from_id:{1} to_id:{2} out:{3} unread:{4} date:{5} action:{6})", id, return String.Format("(messageService flags:{0} id:{1} from_id:{2} to_id:{3} date:{4} action:{5})",
from_id, to_id, output, unread, date, action); flags, id, from_id, to_id, date, action);
} }
} }

View file

@ -294,5 +294,33 @@ namespace TLSharp.Core
}; };
} }
public async Task<ChatConstructor> CreateChat(string title, List<string> userPhonesToInvite)
{
var userIdsToInvite = new List<int>();
foreach (var userPhone in userPhonesToInvite)
{
var uid = await ImportContactByPhoneNumber(userPhone);
if (!uid.HasValue)
throw new InvalidOperationException($"Failed to retrieve contact {userPhone}");
userIdsToInvite.Add(uid.Value);
}
return await CreateChat(title, userIdsToInvite);
}
public async Task<ChatConstructor> CreateChat(string title, List<int> userIdsToInvite)
{
var request = new CreateChatRequest(userIdsToInvite.Select(uid => new InputUserContactConstructor(uid)).ToList(), title);
await _sender.Send(request);
await _sender.Receive(request);
var serviceMessage = request.message.message as MessageServiceConstructor;
var peerChat = serviceMessage.to_id as PeerChatConstructor;
var createdChatId = peerChat.chat_id;
return request.message.chats.OfType<ChatConstructor>().Single(c => c.id == createdChatId);
}
} }
} }

View file

@ -1,5 +1,7 @@
using System; using System;
using System.Collections.Generic;
using System.Configuration; using System.Configuration;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -269,5 +271,31 @@ namespace TLSharp.Tests
Assert.IsNotNull(userFull); Assert.IsNotNull(userFull);
} }
[TestMethod]
public async Task CreateChatRequest()
{
var store = new FileSessionStore();
var client = new TelegramClient(store, "session", apiId, apiHash);
await client.Connect();
if (!client.IsUserAuthorized())
{
var hash = await client.SendCodeRequest(NumberToAuthenticate);
var code = ""; // you can change code in debugger
Debugger.Break();
await client.MakeAuth(NumberToAuthenticate, hash, code);
}
Assert.IsTrue(client.IsUserAuthorized());
var chatName = Guid.NewGuid().ToString();
var chat = await client.CreateChat(chatName, new List<string> {NumberToSendMessage});
Assert.AreEqual(chatName, chat.title);
Assert.AreEqual(2, chat.participants_count);
}
} }
} }