From 21c7f719717e4e517163cbf8e30af559f5dd1b4b Mon Sep 17 00:00:00 2001 From: randogoth Date: Fri, 19 May 2023 02:18:16 +0300 Subject: [PATCH] init --- __pycache__/bot.cpython-310.pyc | Bin 0 -> 4120 bytes bot.py | 101 ++++++++++++++++++++++++++++++++ randobot.py | 10 ++++ 3 files changed, 111 insertions(+) create mode 100644 __pycache__/bot.cpython-310.pyc create mode 100644 bot.py create mode 100644 randobot.py diff --git a/__pycache__/bot.cpython-310.pyc b/__pycache__/bot.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e99f5341a7e9473b8899eabc6ef7a2a0c575c52a GIT binary patch literal 4120 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 int(time.time()): + RNS.log('Recent announcement', RNS.LOG_DEBUG) + else: + with open(self.announce_path, "w") as af: + next_announce = int(time.time()) + 1800 + af.write(str(next_announce)) + self.local.announce() + RNS.log('Announcement sent, expr set 1800 seconds', RNS.LOG_INFO) + + def received(self, function): + self.delivery_callbacks.append(function) + return function + + def _message_received(self, message): + sender = RNS.hexrep(message.source_hash, delimit=False) + def reply(msg): + self.send(sender, msg) + for callback in self.delivery_callbacks: + obj = { + 'lxmf' : message, + 'reply' : reply, + 'sender' : sender, + 'content' : message.content.decode('utf-8') + } + msg = SimpleNamespace(**obj) + callback(msg) + + def send(self, destination, message, title='Reply'): + try: + hash = bytes.fromhex(destination) + except Exception as e: + RNS.log("Invalid destination hash", RNS.LOG_ERROR) + return + + if not len(hash) == RNS.Reticulum.TRUNCATED_HASHLENGTH//8: + RNS.log("Invalid destination hash length", RNS.LOG_ERROR) + else: + id = RNS.Identity.recall(hash) + + if id == None: + RNS.log("Could not recall an Identity for the requested address. You have probably never received an announce from it. Try requesting a path from the network first. In fact, let's do this now :)", RNS.LOG_ERROR) + RNS.Transport.request_path(hash) + RNS.log("OK, a path was requested. If the network knows a path, you will receive an announce with the Identity data shortly.", RNS.LOG_INFO) + else: + lxmf_destination = RNS.Destination(id, RNS.Destination.OUT, RNS.Destination.SINGLE, "lxmf", "delivery") + lxm = LXMessage(lxmf_destination, self.local, message, title=title, desired_method=LXMessage.DIRECT) + lxm.try_propagation_on_fail = True + self.queue.put(lxm) + + def run(self, delay=10): + RNS.log(f'LXMF Bot `{self.name}` reporting for duty and awaiting messages...', RNS.LOG_INFO) + while True: + for i in list(self.queue.queue): + lxm = self.queue.get() + self.router.handle_outbound(lxm) + self._announce + time.sleep(delay) \ No newline at end of file diff --git a/randobot.py b/randobot.py new file mode 100644 index 0000000..e1a2baa --- /dev/null +++ b/randobot.py @@ -0,0 +1,10 @@ +from bot import LXMFBot +from pprint import pprint + +bot = LXMFBot("Randobot") + +@bot.received +def echo_msg(msg): + msg.reply(msg.content) + +bot.run() \ No newline at end of file