#python #events #message #telethon
#python #Мероприятия #Сообщение #телемарафон
Вопрос:
Я использую Telethon для простого скрипта на Python, способного управлять сообщениями telegram icoming для пользователя и сохранять их в файле. Затем я хотел бы прокрутить файл и отправить сообщение кому-то другому.
Как я могу это сделать?
На мой взгляд, эта проблема является проблемой типа: когда я пишу файл, добавляющий новое входящее сообщение, я строю сообщение о событии {Сообщение}. Когда я читаю строку файла, у меня больше нет структуры {Message}, но я читаю строку. Как я могу «разобрать» эту строку в соответствии с форматом {Message}? Я также пытался с помощью JSON, но у меня не получилось!
<<Извините, я новичок в python, правила C!>>
Комментарии:
1. Я рекомендую вам придерживаться чего-то простого, например JSON, но хранить только то, что вам нужно. То есть создайте свой собственный словарь, содержащий только те простые данные, которые вам нужны, и сохраните их, затем загрузите и используйте как dict. Пока
message.to_dict()
существует, нет способа сделать обратное.
Ответ №1:
прошло 10 месяцев, но я только что прочитал 🙂 я использую этот код:
from datetime import datetime
import time
import requests
import configparser
import json
import re
from telethon.errors import SessionPasswordNeededError
from telethon import TelegramClient, events, sync
from telethon.tl.functions.messages import (GetHistoryRequest)
from telethon.tl.types import (
PeerChannel
)
api_id = Yourapiid
api_hash = 'yourhash'
client = TelegramClient('name',api_id,api_hash)
vip=[-236123612,-100236123612] # some id of channels (i typed radnom numbers here)
@client.on(events.NewMessage(outgoing=False)) # all incoming messages
async def my_event_handler(event):
newMessage = event.message.message # this is only a telegram message content, its what u see on telegram
FullMessage = event.message # this is full message event, with technical things undergoingm like some True, False, etc, and with buttons if any.
if event.message.sender_id in vip:
time = datetime.now().strftime("%d-%m-%Y %H:%M:%S")
printRAW1("====================================== " time)
printRAW1(newMessage)
with client:
client.run_until_disconnected()
я использую подобную функцию, чтобы печатать сообщения из telegram в файл, одно под другим:
`def printRAW1(*Text):
RAWOut = open('file.txt', 'a', encoding='utf8', closefd=True)
print(*Text, file=RAWOut)
RAWOut.flush()
RAWOut.close() `
возможно, это было бы полезно для кого-то.
я запускаю его в приглашении anaconda, используя команду «активировать» перед скриптом python, чтобы функции работали правильно.
Ответ №2:
Вы можете использовать подобный список. Это может быть идентификатор, имя или ссылка.
chats= ['https://t.me/channel_name', 'channel_name','320323232']
@client.on(events.NewMessage(chats=chats))
async def message_handler(message):
#do your stuff