TLSharp 数据中心 (dc) 异常
TLSharp Data center (dc) Exception
我正在使用 TLSharp 库来实现自定义 Telegram 客户端。当我 运行 下面的代码时:
public async Task<string> SendCodeRequest(string phoneNumber)
{
var completed = false;
TL.AuthSendCodeRequest request = null;
while (!completed)
{
request = new TL.AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
await _sender.Send(request);
await _sender.Receive(request);
completed = true;
}
// TODO handle other types (such as SMS)
if (request.Result is TL.AuthSentCodeType)
{
var result = (TL.AuthSentCodeType)request.Result;
return result.PhoneCodeHash;
}
else
{
var result = (TL.AuthSentAppCodeType)request.Result;
return result.PhoneCodeHash;
}
}
我给出了以下异常:
Your phone number registered to {dcIdx} dc. Please update settings.
See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for
details.
提到的 github 页面说 TLSharp 自己处理这些异常。所以我猜库核心有问题,因为代码应该自行解析数据中心 IP,而不是生成异常。
如有任何帮助,我们将不胜感激。
TlSharp 目前不处理此异常,您必须捕获异常并获取数据中心编号,然后尝试使用 ReconnectToDc() 函数重新连接到数据中心。
在 MtProtoSender.cs 文件中,您可以找到以下生成异常的代码行:
throw new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
将其替换为以下代码,以便生成的异常具有连接所需的数据中心编号。
InvalidOperationException exception = new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
exception.Data.Add("dcId", dcIdx);
throw exception;
像这样更改您的代码:
while (!completed)
{
request = new TL.AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
try
{
await _sender.Send(request);
await _sender.Receive(request);
completed = true;
}
catch (InvalidOperationException ex)
{
if (ex.Message.StartsWith("Your phone number registered to") && ex.Data["dcId"] != null)
{
await ReconnectToDc((int)ex.Data["dcId"]);
}
else
{
throw;
}
}
}
在上面的代码中,附加到异常的数据中心编号用于重新连接到数据中心。
可能您的 phone 号码不是 Telegram 接受的格式。
Phone号码必须以加号开头,使用国家代码和phone号码之间不要有空格,例如:+989333333333
我正在使用 TLSharp 库来实现自定义 Telegram 客户端。当我 运行 下面的代码时:
public async Task<string> SendCodeRequest(string phoneNumber)
{
var completed = false;
TL.AuthSendCodeRequest request = null;
while (!completed)
{
request = new TL.AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
await _sender.Send(request);
await _sender.Receive(request);
completed = true;
}
// TODO handle other types (such as SMS)
if (request.Result is TL.AuthSentCodeType)
{
var result = (TL.AuthSentCodeType)request.Result;
return result.PhoneCodeHash;
}
else
{
var result = (TL.AuthSentAppCodeType)request.Result;
return result.PhoneCodeHash;
}
}
我给出了以下异常:
Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.
提到的 github 页面说 TLSharp 自己处理这些异常。所以我猜库核心有问题,因为代码应该自行解析数据中心 IP,而不是生成异常。
如有任何帮助,我们将不胜感激。
TlSharp 目前不处理此异常,您必须捕获异常并获取数据中心编号,然后尝试使用 ReconnectToDc() 函数重新连接到数据中心。
在 MtProtoSender.cs 文件中,您可以找到以下生成异常的代码行:
throw new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
将其替换为以下代码,以便生成的异常具有连接所需的数据中心编号。
InvalidOperationException exception = new InvalidOperationException($"Your phone number registered to {dcIdx} dc. Please update settings. See https://github.com/sochix/TLSharp#i-get-an-error-migrate_x for details.");
exception.Data.Add("dcId", dcIdx);
throw exception;
像这样更改您的代码:
while (!completed)
{
request = new TL.AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
try
{
await _sender.Send(request);
await _sender.Receive(request);
completed = true;
}
catch (InvalidOperationException ex)
{
if (ex.Message.StartsWith("Your phone number registered to") && ex.Data["dcId"] != null)
{
await ReconnectToDc((int)ex.Data["dcId"]);
}
else
{
throw;
}
}
}
在上面的代码中,附加到异常的数据中心编号用于重新连接到数据中心。
可能您的 phone 号码不是 Telegram 接受的格式。
Phone号码必须以加号开头,使用国家代码和phone号码之间不要有空格,例如:+989333333333