Closed k-Sacr closed 5 years ago
@k-Sacr Привет. Надеюсь, исправил, попробуйте 0.3.2-preview002.
Спасибо помогло. Можешь еще подсказать пожалуйста. как отправить сообщение пользователю зная его номер телефона?
Найти пользователя по его телефону можно через импорт контактов, уже описывал это здесь #22. Можно не импортировать, а искать в списке имеющихся контактов. Вот простой пример, который каждый раз импортирует пользователя и отправляет ему сообщение (расширение .AssertSome()
здесь)
static async Task SendMessage(TelegramClient tg, string userPhone, string message)
{
const string tmpFirstName = "temporary";
const string tmpLastName = "user";
var importResponse = await tg.Call(new ImportContacts(
contacts: Array(new InputContact(
clientId: 0,
phone: userPhone,
firstName: tmpFirstName,
lastName: tmpLastName
))
));
var importedUser = importResponse.Users.Choose(User.AsTag).Single();
await tg.Messages.SendMessage(
peer: new InputPeer.UserTag(
userId: importedUser.Id,
accessHash: importedUser.AccessHash.AssertSome()
),
message: message
);
}
Пробовал подобный метод, только через получение контактов, вот мой код:
public static async Task SendMessage(TelegramClient tg, string phone, string message)
{
try
{
var contacts = await tg.Contacts.GetContacts();
var chats = contacts.AsTag().IfNone(() => throw new NotImplementedException());
var user = chats.Users.Cast<User.Tag>().FirstOrDefault(x => x.Phone == phone);
if (user != null)
{
var inputPeer = new InputPeer.UserTag(user.Id, user.AccessHash.AssertSome());
await tg.Messages.SendMessage(
peer: inputPeer,
message: message
);
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
В chats.Users.Cast<User.Tag>().FirstOrDefault(x => x.Phone == phone);
получаю
Exception Message="Не удалось привести тип объекта \"Telega.Rpc.Dto.Types.User\" к типу \"Tag\"."
@k-Sacr Это случается потому, что User.Tag
и User
это разные классы, User.Tag
находится внутри User
, надо заменить .Cast<User.Tag>()
на .Choose(User.AsTag)
Спасибо, не заметил такой очевидной ошибки. С вами можно связаться в телеграме? Мы хотим использовать Telega в нашем проекте и хотелось бы с вами проконсультироваться так сказать.
Да, можно, https://t.me/ilyalatt
Привет. Использую 0.3.2-preview001, по примеру из Telega.Example/Program.cs.
В
SignInViaCode(TelegramClient tg, Config cfg)
при запросе кодаvar codeHash = await tg.Auth.SendCode(cfg.ApiHash, cfg.Phone);
вылетает с Telega.TgNotAuthenticatedException: "Authentication is required."Подскажите пожалуйста решение.
ps: Надеюсь я верно решил, что вы русский.