kotlin 我正在试着修改代码,但是我弄不清楚电报是如何解析消息的

sycxhyv7  于 2023-03-30  发布在  Kotlin
关注(0)|答案(1)|浏览(180)

这是我的代码,它的工作原理(但不是它应该),我可以得到的文章和1个附加的媒体文件的文本,但如果有超过1个媒体文件在后,那么我只得到最后一个。
我用的库,kotlogramtelethon差不多

try {

var messageText = ""
    // Get most recent message
    val tl = client.messagesGetHistory(inputPeer, 0, 0, 0, 1, 0, 0)
    var mess = tl.messages
    var filename: String
    var index = 0

    for (messages in mess) {
        if (messages is TLMessage) {

            val b: TLAbsMessageMedia? = messages.media

            index++
            when (b) {
                is TLMessageMediaPhoto -> {
                    messageText = b.caption
                    filename = "photo$index.jpg"
                    println(messageText)
                    var ROOT_DIR = "C:\\fopii"
                    fos = withContext(Dispatchers.IO) {
                        FileOutputStream(File(ROOT_DIR, filename))
                    }
                    Input.add(b.getMediaInput()!!.inputFileLocation)
                    size.add(b.getMediaInput()!!.size)
                    // downloadSync closes the stream automatically
                }

                is TLMessageMediaDocument -> {
                    messageText = b.caption

                    val tlDocumentt = b.document.asDocument
                    val p = (tlDocumentt.attributes.stream()
                        .filter { attr: TLAbsDocumentAttribute? -> attr is TLDocumentAttributeFilename }
                        .findFirst().get() as TLDocumentAttributeFilename).fileName
                    filename = p
                    Input.add(b.getMediaInput()!!.inputFileLocation)
                    size.add(b.getMediaInput()!!.size)
                    var ROOT_DIR = "C:\\fopii"
                    fos = withContext(Dispatchers.IO) {
                        FileOutputStream(File(ROOT_DIR, filename))
                    }

                }
            }

        }

        println(Input)
        println("$size a")
        println(messageText)
        client.downloadSync(Input.get(0), size.get(0), fos)


    }

}catch (e: Exception){
    e.printStackTrace()
}finally {
    client.close()
}

我只得到1个最新的媒体文件,但我需要的一切

y1aodyip

y1aodyip1#

您使用

val tl = client.messagesGetHistory(inputPeer, 0, 0, 0, 1, 0, 0)

如果查看documentationgetHistory的参数,则将限制设置为1。
试着把数字增加到10或20。
我不知道你想抓取多少个文件,但你需要分页或无限滚动,我无法想象它是允许设置限制〉100

更新

要在一个聊天中获取所有对话框(或电报称之为消息),您需要与此端点对话:https://core.telegram.org/method/messages.getDialogs

相关问题