1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 11:34:18 +00:00
royalnet/telegram.py
2016-06-16 15:52:26 +02:00

187 lines
6.2 KiB
Python

# -*- coding: utf-8 -*-
import requests
import filemanager
import time
# Per far funzionare questa libreria serve un file "lastid.txt" contenente l'update ID dell'ultimo messaggio non letto e
# un file "telegramapi.txt" contenente il token di accesso del bot assegnato da @BotFather.
telegramtoken = filemanager.readfile('telegramapi.txt')
def getme() -> dict():
"""Visualizza dati sul bot."""
# Manda la richiesta
data = requests.get("https://api.telegram.org/bot" + telegramtoken + "/getMe")
return data
def getupdates() -> dict():
"""Ricevi gli ultimi aggiornamenti dal server di Telegram e restituisci l'ultimo messaggio non letto."""
while True:
parametri = {
'offset': filemanager.readfile("lastid.txt"), # Update ID del messaggio da leggere
'limit': 1, # Numero di messaggi da ricevere alla volta, lasciare 1
'timeout': 1500, # Secondi da mantenere attiva la richiesta se non c'e' nessun messaggio
}
data = requests.get("https://api.telegram.org/bot" + telegramtoken + "/getUpdates", params=parametri)
if data.status_code == 200:
data = data.json()
if data['ok']:
if data['result']:
filemanager.writefile("lastid.txt", str(data['result'][0]['update_id'] + 1))
# Controlla che la risposta sia effettivamente un messaggio e non una notifica di servizio
if 'message' in data['result'][0]:
return data['result'][0]['message']
elif 'edited_message' in data['result'][0]:
tmp = {
"edit": True,
"edit_data": data['result'][0]['edited_message']
}
return tmp
else:
# Non vogliamo DDoSsare telegram, vero?
time.sleep(2)
def sendmessage(content, to, reply=None) -> None:
"""Manda un messaggio a una chat.
:param content: Testo del messaggio
:param to: Destinatario del messaggio
:param reply: Messaggio a cui rispondere
"""
# Parametri del messaggio
parametri = {
'chat_id': to,
'text': content,
'parse_mode': 'Markdown', # Formattare il messaggio?
'reply_to_message_id': reply
}
# Manda il messaggio
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendMessage", params=parametri)
def forwardmessage(msg, sentby, to) -> None:
"""Inoltra un messaggio mandato in un'altra chat.
:param msg: ID del messaggio
:param sentby: Persona da cui è stato mandato il messaggio
:param to: Destinatario del messaggio inoltrato
"""
parametri = {
'chat_id': to,
'from_chat_id': sentby,
'message_id': msg,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/forwardMessage", params=parametri)
def sendphoto(pic, text, to) -> None:
"""Manda una foto compressa a una chat.
:param pic: ID della foto da inviare
:param text: Testo della foto da inviare
:param to: Destinatario della foto
"""
parametri = {
'chat_id': to,
'photo': pic,
'caption': text,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendPhoto", params=parametri)
def sendaudio(aud, to) -> None:
"""Manda un file audio .mp3 a una chat.
:param aud: ID del file audio
:param to: Destinatario dell'audio
"""
parametri = {
'chat_id': to,
'audio': aud,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendAudio", params=parametri)
def senddocument(doc, to, reply=None) -> None:
"""Manda un file a una chat.
:param reply: ID del messaggio a cui rispondere
:param doc: ID del documento
:param to: Destinatario del documento
"""
parametri = {
'chat_id': to,
'document': doc,
'reply_to_message_id': reply
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendDocument", params=parametri)
def sendsticker(stk, to) -> None:
"""Manda uno sticker a una chat.
:param stk: ID dello sticker
:param to: Destinatario dello sticker
"""
parametri = {
'chat_id': to,
'sticker': stk,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendSticker", params=parametri)
def sendvideo(vid, to) -> None:
"""Manda un video .mp4 a una chat.
:param vid: ID del video
:param to: Destinatario del video
"""
parametri = {
'chat_id': to,
'video': vid,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendVideo", params=parametri)
def sendvoice(aud, to) -> None:
"""Manda un file audio .ogg con OPUS a una chat come se fosse un messaggio vocale.
:param aud: ID dell'audio
:param to: Destinatario dell'audio
"""
parametri = {
'chat_id': to,
'voice': aud,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendVoice", params=parametri)
def sendlocation(lat, long, to) -> None:
"""Manda una posizione sulla mappa.
:param lat: Latitudine
:param long: Longitudine
:param to: Destinatario della posizione
"""
# Parametri del messaggio
parametri = {
'chat_id': to,
'latitude': lat,
'longitude': long,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendLocation", params=parametri)
def sendchataction(to, action='typing') -> None:
"""Visualizza lo stato "sta scrivendo" del bot.
:param to: Chat in cui visualizzare lo stato
:param action: Tipo di stato da visualizzare
"""
# Parametri del messaggio
parametri = {
'chat_id': to,
'action': action,
}
# Manda la richiesta ai server di Telegram.
requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendChatAction", params=parametri)