# uuid=ed718cf7-968e-4e39-9053-3425f43b8fee
# version=1
if version\0 < 1:
from channels import User, Channel, Thread, Message, dispatch_message_to_channel, format_message
TOKEN = file_lines('secrets/test.token')[0]
tg_poll = PrimaTelegramUpdates{TOKEN}
tg_me = PRIMOP{'Ftg_me' , TOKEN}
tg_send = PRIMOP{'Ftg_send' , TOKEN}
type TelegramUser in User:
var tg_user
type TelegramChannel in Channel:
val tg_chat
type TelegramMessage in Message:
val tg_msg
tg_users = [:]
tg_channels = [:]
tg_messages = [:]
def get_TelegramChannel(tg_chat):
if not (id = tg_chat.id)?:
raise("Missing id")
if not (chan = tg_channels[id])?:
print("TELEGRAM: Creating new telegram channel for chat id {id}")
chan = tg_channels[id] = TelegramChannel(tg_chat=tg_chat)
return chan
def new_TelegramUser(tg_user, chan):
tg_users[tg_user.id] = user = TelegramUser(tg_user=tg_user, name=tg_user.first_name\tg_user.username, default_channel=chan)
print("TELEGRAM: Created new user {user.name}:")
pprint(user)
return user
def get_TelegramUser(tg_user, chan):
if (user=tg_users[tg_user.id])?:
return user
return new_TelegramUser(tg_user, chan)
def new_TelegramMessage(chan, tg_msg):
m = TelegramMessage(when=tg_msg.date, text=tg_msg.text, from=get_TelegramUser(tg_msg.from, chan), tg_msg=tg_msg, channel=chan, in_reply_to=tg_messages[tg_msg.reply_to_message.message_id])
tg_messages[tg_msg.message_id] = m
return m
def send_message_to_telegram_channel(chan, text):
print("TELEGRAM: Sending to {chan}: {text}")
tg_msg = tg_send(chan.tg_chat.id, text)
return new_TelegramMessage(chan, tg_msg)
tg_agent = new_TelegramUser(tg_me())
tg_agent.name = "Agent"
spawn:
print('About to call tg_poll() for the first time...')
while (updates = tg_poll())?:
for update in updates:
print('TELEGRAM: Got an update')
if (m = update.message)?:
chan = get_TelegramChannel(m.chat)
m = new_TelegramMessage(chan, m)
print("TELEGRAM: {format_message(m)}")
dispatch_message_to_channel(m, chan)
else:
print('TELEGRAM: WARNING: Unhandled telegram update:')
pprint(update)
print('TELEGRAM: Waiting for next update...')
version = 1