这是我的代码,它的工作原理(但不是它应该),我可以得到的文章和1个附加的媒体文件的文本,但如果有超过1个媒体文件在后,那么我只得到最后一个。
我用的库,kotlogram
和telethon
差不多
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个最新的媒体文件,但我需要的一切
1条答案
按热度按时间y1aodyip1#
您使用
如果查看documentation中
getHistory
的参数,则将限制设置为1。试着把数字增加到10或20。
我不知道你想抓取多少个文件,但你需要分页或无限滚动,我无法想象它是允许设置限制〉100
更新
要在一个聊天中获取所有对话框(或电报称之为消息),您需要与此端点对话:https://core.telegram.org/method/messages.getDialogs