【问题标题】:Telegram Flood prevention电报防洪
【发布时间】:2022-03-21 01:52:12
【问题描述】:

有这样一个问题:我多次运行程序,现在它抛出以下错误FloodException:防洪。 Telegram 现在要求您的程序仅在经过 73611 秒后才再次发出请求(TimeToWait 属性)。如果你认为这个问题的罪魁祸首可能在于 TLSharp 的实现,请打开一个 Github 问题。 我附上以下代码:

using System;
using System.Text;
using System.Windows.Forms;
using TeleSharp.TL;
using TeleSharp.TL.Messages;
using TLSharp.Core;
namespace tgBM
{
    public partial class Form1: Form
    {
        string phone;
        string code;
        int n = 1;
        StringBuilder sb = new StringBuilder ();
        TelegramClient client = new TelegramClient (2646156, "08ec188e0bdee432e568120348f5f13a"); // create a client with parameters
      
        public Form1 ()
        {
            InitializeComponent();
        }

        string str = "";

        public async void authAsync()
        {
            var dialogs = (TLDialogs) await client.GetUserDialogsAsync();
            foreach (var element in dialogs.Chats)
            {
                TLChat chat = element as TLChat;
                if (element is TLChannel)
                {
                    var offset = 0;
                    TLChannel channel = element as TLChannel;
                    if (channel.Title == "TOPLES")
                    {
                        TLChannel ch = element as TLChannel;
                        TLInputPeerChannel inputPeer = new TLInputPeerChannel() {ChannelId = ch.Id, AccessHash = (long) ch.AccessHash};
                        while (n! = 11)
                        {
                            try
                            {
                                TLChannelMessages res = await client.SendRequestAsync <TLChannelMessages>
                                (new TLRequestGetHistory() {Peer = inputPeer, Limit = 20, AddOffset = offset, OffsetId = 0});
                                var msgs = res.Messages;
                                if (res.Count> offset)
                                {
                                    offset + = msgs.Count;
                                    foreach (TLAbsMessage msg in msgs)
                                    {
                                        if (msg is TLMessage)
                                        {
                                            TLMessage message = msg as TLMessage;
                                            str + = n.ToString () + "\ t" + message.Id + "\ t" + message.FromId + "\ t" + message.Message + Environment.NewLine;
                                        }
                                        if (msg is TLMessageService)
                                            continue;
                                        n ++;
                                    }
                                }
                                else
                                    break;
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show (ex.Message);
                                break;
                            }
                        }
                    }
                }
                textBox3.Text = str;
            }
        }

        private async void button1_Click (object sender, EventArgs e)
        {
            phone = textBox1.Text;
            await client.ConnectAsync (); // make a connection
            var hash = await client.SendCodeRequestAsync(phone);
        }

        private async void button2_Click (object sender, EventArgs e)
        {
            code = textBox2.Text;
            var user = await client.MakeAuthAsync(phone, await client.SendCodeRequestAsync(phone), code);
            authAsync();
        }
    }
} 

【问题讨论】:

  • 您发送的消息似乎太多了。
  • 是的,但是在测试过程中我总是多次运行程序。所以我不知道该怎么办。
  • 单元测试是在不影响内部服务的情况下测试应用程序的好主意。

标签: c# api telegram telegram-api


【解决方案1】:

在评论中,您说处于测试阶段。 在这种情况下,您应该阅读https://core.telegram.org/api/auth#test-accounts

根据此页面,有 3 种方法可以执行测试,同时限制 FLOOD_WAIT 错误的风险:

  • 连接到测试服务器而不是生产服务器(TLSharp 似乎不可能)
  • 使用电话号码为 99966XYYYY 的测试帐户(仅在测试服务器上可用)
  • 以用户身份与您用于创建 API ID/哈希的电话号码连接

我可以使用WTelegramClient 完成所有这些操作(TLSharp 不再维护,无法再连接到 Telegram 服务器)

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 2012-07-13
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2011-03-02
    相关资源
    最近更新 更多