BastliBridge

A bot framework bridgin multiple IM protocols, and mail
git clone git://xatko.vsos.ethz.ch/BastliBridge.git
Log | Files | Refs | Submodules

commit 832fa6adc565db3643c420a22546e0740b3b9b47
parent 94b54874275494fea2cf863f86b45a7ecf758801
Author: Dominik Schmidt <das1993@hotmail.com>
Date:   Wed, 13 Sep 2017 20:03:00 +0200

Track the last received update on both sides.

Diffstat:
src/telegram.d | 33+++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+), 0 deletions(-)

diff --git a/src/telegram.d b/src/telegram.d @@ -13,6 +13,7 @@ import std.typecons; import std.string; import std.json; import std.exception; +import std.datetime :SysTime,Clock; import deimos.ev; class TelegramErrnoException : ErrnoException{ @@ -386,6 +387,28 @@ struct Bot{ string[long] telegram_channels; + struct LastUpdate{ + SysTime Telegram,IRC; + void updateTelegram(){ + Telegram=Clock.currTime(); + } + void updateIRC(){ + IRC=Clock.currTime(); + } + string toString(string separator=", "){ + auto now=Clock.currTime; + string str=format!( + "Last Update received from IRC: %s UTC, that is %s ago%s"~ + "Last update received from Telegram: %s UTC, that is %s ago" + )(IRC.toUTC.toString(), (now-IRC).toString, + separator, + Telegram.toUTC.toString, (now-Telegram).toString); + return str; + } + } + + LastUpdate lastUpdate; + this(string tgramApiKey){ telegram=Telegram("253031348:AAGn4dHCPwFDSN4Bmt4ZWc3bIAmARmzsf9k"); } @@ -428,6 +451,9 @@ struct Bot{ case "list_telegram": ircClient.send(tt, telegram_channels.byPair.map!(a=>a[1]~"("~a[0].to!string~")").join(", ")); break; + case "lastUpdate": + ircClient.send(tt, lastUpdate.toString(", ")); + break; default: ircClient.send(tt, "Unknown command"); break; @@ -479,6 +505,9 @@ struct Bot{ unlink(split[2], chatid); ircClient.notice(split[2], "Unlinked with "~chatid.to!string); break; + case "lastUpdate": + telegram.send(chatid, lastUpdate.toString("\n")); + break; default: //telegram.send(chatid, split[0]~": Unknown command"); break; @@ -533,6 +562,8 @@ struct Bot{ w_irc=Watcher(ircSocket,(revents){ trace("IRC Update"); + lastUpdate.updateIRC(); + if(ircClient.read()){ ev_io_stop(eventloop, &w_irc.io); } @@ -540,6 +571,8 @@ struct Bot{ w_tele=Watcher(telegram.sock,(revents){ trace("Telegram Update"); + lastUpdate.updateTelegram(); + Exception e; bool res; try res=telegram.read();