From e50b8fa9e02b19ece80ebeb576051e451d3a7812 Mon Sep 17 00:00:00 2001 From: Matias Linares Date: Tue, 24 Mar 2020 19:37:11 -0300 Subject: Rename some things to from perl6 to raku --- examples/bot.raku | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 examples/bot.raku (limited to 'examples/bot.raku') diff --git a/examples/bot.raku b/examples/bot.raku new file mode 100755 index 0000000..8a9d206 --- /dev/null +++ b/examples/bot.raku @@ -0,0 +1,81 @@ +#!/usr/bin/env perl6 +use v6; +use lib "lib"; +use JSON::Fast; +use Matrix::Client; +use Matrix::Client::Exception; + +class Bot { + has $!name = "!d"; + has $!username is required; + has Bool $!register = False; + + has $!on-event; + + has Matrix::Client $!client; + + submethod BUILD(:$username!, :$password!, :$home-server!,:$on-event!) { + $!client = Matrix::Client.new(:home-server($home-server)); + $!username = $username; + $!on-event = $on-event; + + $!client.login($!username, $password); + } + + method shutdown() { + $!client.save-auth-data; + } + + method listen() { + say "Listening"; + my $since = ""; + + loop { + my $sync = { room => timeline => limit => 1 }; + my $response = $!client.sync(sync-filter => $sync, since => $since); + $since = $response.next-batch; + + for $response.joined-rooms -> $room { + for $room.timeline + .events + .grep(*.type eq 'm.room.message') -> $msg { + if $msg.content.match($!name) { + my $bot-msg = $!on-event($msg); + if so $bot-msg { + say "Sending message $bot-msg"; + try { + CATCH { when X::Matrix::Response { .message }} + my $res = $!client.send($room.room-id, ~$bot-msg); + } + } + } + } + } + sleep(10); + } + } +} + +sub MAIN(Str:D $username, Str:D $password, :$home-server = "https://matrix.deprecated.org") { + my $bot = Bot.new: + username => $username, + password => $password, + home-server => $home-server, + on-event => -> $ev { + given $ev.content { + when /"say hi"/ { + say "Someone says {$ev.content}"; + "Hello @ {DateTime.now}" + } + default { say "Dunno what's telling me"; Str } + } + }; + + signal(SIGINT).tap({ + say "Bye"; + $bot.shutdown; + exit 0; + }); + + $bot.listen; +} -- cgit v1.2.3-54-g00ecf