【问题标题】:Forwarding message with TLSharp library (C#)使用 TLSharp 库(C#)转发消息
【发布时间】:2023-04-06 05:27:01
【问题描述】:

我正在使用这个 C# 库连接到 Telegram API:TLSharp

这个库的资源不够,我正在尝试转发一条消息到频道。

我不确定如何获取频道帖子peer id(用于转发函数输入参数)

var store = new FileSessionStore();
            var client = new TelegramClient(Properties.Settings.Default.apiID, Properties.Settings.Default.apiHash, store, "session");
            await client.ConnectAsync();
            var dialogs = (TLDialogs)await client.GetUserDialogsAsync();
            var chat = dialogs.chats.lists
                .OfType<TLChannel>()
                .SingleOrDefault(a=>a.title=="test");
            await client.SendRequestAsync<TLAbsUpdates>(
                               new TLRequestForwardMessage()
                               {
                                   id = 2,
                                   peer = new TLInputPeerChannel() { channel_id = chat.id, access_hash = chat.access_hash.Value },
                                   random_id = Helpers.GenerateRandomLong()
                               });

我收到此错误消息:

{“PEER_ID_INVALID”}

请帮助我,该对等 ID 是什么,我如何访问和使用它来使用 TLSharp 转发消息。谢谢。

【问题讨论】:

  • 您是该频道的所有者吗?
  • @CharlesOkwuagwu 是的,我们有那个频道和群组

标签: c# api telegram forward


【解决方案1】:

这是我转发消息的代码:

/* e.g you can use TLInputPeerUser, TLInputPeerChat, TLInputPeerChannel here as an SourcePeer */
// a Person
var sourcePeer = new TLInputPeerUser { UserId = <<<USER.ID>>>, AccessHash = <<<USER.AccessHash>>> };
    
// normal Group
//var sourcePeer = new TLInputPeerChat { ChatId = <<<USER.ID>>> };

// SuperGroup or Channel
//var sourcePeer = new TLInputPeerChannel { ChatId = <<<USER.ID>>> , AccessHash = <<<USER.AccessHash>>> };


/* e.g you can use TLInputPeerUser, TLInputPeerChat, TLInputPeerChannel here as an SourcePeer */
// a Person
//var targetPeer = new TLInputPeerUser { UserId = <<<USER.ID>>>, AccessHash = <<<USER.AccessHash>>> };

// normal Group
var targetPeer = new TLInputPeerChat { ChatId = <<<USER.ID>>> };

// SuperGroup or Channel
//var targetPeer = new TLInputPeerChannel { ChatId = <<<USER.ID>>> , AccessHash = <<<USER.AccessHash>>> };

// random Ids to prevent bombinggg
var randomIds = new TLVector<long>
{
    TLSharp.Core.Utils.Helpers.GenerateRandomLong()
};

// source messages
var sourceMessageIds = new TLVector<int>
{
    messageIdInSourceContactToForward   // this ID should be in the SourcePeer's Messages
};

var forwardRequest = new TLRequestForwardMessages()
{
    FromPeer = sourcePeer,
    Id = sourceMessageIds,
    ToPeer = targetPeer,
    RandomId = randomIds,
    //Silent = false
};

var result = await myTelegramClient.SendRequestAsync<TLUpdates>(forwardRequest);

我不能使用this method,必须使用this one

【讨论】:

    【解决方案2】:

    此代码可用于转发

    **

    await client.SendRequestAsync<TLAbsUpdates>( new TLRequestForwardMessage() { id = item2.Id, peer = new TLInputPeerChat() { chat_id = item.id }, random_id = Helpers.GenerateRandomLong(), });
    ---------------------------------------
    

    **---------------------------------

    【讨论】:

    • 请问item和item2是什么类型?(TLMessage or TLChannel or TLChat)
    • @purTahan 你好!对于将消息发送到频道,您必须使用方法 SendMessagesAsync 方法 SendMessageAsync 不适用于发送到频道
    【解决方案3】:

    你可以用这个有趣的技巧来做到这一点:这段代码如下:

    new TLInputPeerChannel { channel_id = chat.id, access_hash = cha.access_hash.Value }, offset,
                    maxId, limit);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多