Annotation of ChivanetAimDiscordSyncBot/chatsync.pl, revision 1.1

1.1     ! snw         1: #!/usr/bin/env perl
        !             2: 
        !             3: # 
        !             4: # ChivaNet AIM<>Discord Chat Sync Bot 
        !             5: #  Copyright (C) 2024, 2025 Coherent Logic Development LLC
        !             6: #
        !             7: # Author: Serena Willis <snw@coherent-logic.com>
        !             8: #
        !             9: # Licensed AGPL-3.0
        !            10: #
        !            11: # $Log$
        !            12: #
        !            13: 
        !            14: use Net::OSCAR qw(:standard);
        !            15: use HTML::Strip;
        !            16: use REST::Client;
        !            17: use JSON::XS;
        !            18: use Data::Dumper;
        !            19: use Getopt::Long;
        !            20: use WebService::Discord::Webhook;
        !            21: 
        !            22: my $botsn = '';
        !            23: my $botsrv = '';
        !            24: my $botpw = '';
        !            25: my $chatroom = '';
        !            26: my $webhook_url = '';
        !            27: 
        !            28: $chat = '';
        !            29: 
        !            30: GetOptions("aimsn=s" => \$botsn,
        !            31:             "aimhost=s" => \$botsrv,
        !            32:             "aimpw=s" => \$botpw,
        !            33:             "chatroom=s" => \$chatroom,
        !            34:             "url=s" => \$webhook_url)
        !            35:             or die("error in command line arguments");
        !            36: 
        !            37: %signon = (
        !            38:         screenname => $botsn,
        !            39:         password => $botpw,
        !            40:         host => $botsrv,
        !            41: );       
        !            42: 
        !            43: $oscar = Net::OSCAR->new();
        !            44: $webhook = WebService::Discord::Webhook->new( $webhook_url );
        !            45: 
        !            46: print ("ChivaNet Discord AIM Synchronizer v0.0.1\n");
        !            47: print ("  Connecting to chat room $chatroom\n");
        !            48: 
        !            49: sub signon_done {
        !            50:         print "[OK]\n";
        !            51:         $chat = $oscar->chat_join($chatroom, 5);        
        !            52:         $online = 1;
        !            53: }
        !            54: 
        !            55: sub chat_joined {
        !            56:     my($oscar, $chatname, $chat) = @_;
        !            57: 
        !            58:     $chat->chat_send("discord chatsync engaged for $chatroom");
        !            59: }
        !            60: 
        !            61: sub im_in {
        !            62:     my($oscar, $sender, $message, $is_away) = @_;
        !            63:     print "$sender: $message\n";
        !            64: }
        !            65: 
        !            66: sub chat_im_in {
        !            67:     my($oscar, $who, $chat, $message) = @_;
        !            68:     
        !            69:     my $hs = HTML::Strip->new();
        !            70:     my $msg = $hs->parse($message);
        !            71:     $msg =~ s/\@//g;
        !            72:     $msg =~ s/https/gopher/g;
        !            73:     $msg =~ s/http/gopher/g;
        !            74:     $msg =~ s/ftp/gopher/g;
        !            75: 
        !            76:     $msg =~ s/:-\)/:smile:/g;
        !            77:     $msg =~ s/;-\)/:wink:/g;
        !            78:     $msg =~ s/:-$/:money_mouth:/g;
        !            79:     $msg =~ s/=-O/:astonished:/g;
        !            80:     $msg =~ s/:-X/:zipper_mouth:/g;
        !            81: 
        !            82:     
        !            83:     
        !            84:     my $fmsg = "**$who**: $msg";
        !            85: 
        !            86:     $webhook->execute($fmsg);
        !            87: }
        !            88: 
        !            89: #OSCAR, SCREENNAME, CHAT, BUDDY DATA
        !            90: sub chat_buddy_in {
        !            91:     my ($oscar, $who, $chat, $buddy) = @_;
        !            92:     my $fmsg = "*$who has joined the chat*";
        !            93:     sleep(1);
        !            94:     $webhook->execute($fmsg);
        !            95: }
        !            96: 
        !            97: sub chat_buddy_out {
        !            98:     my ($oscar, $who, $chat) = @_;
        !            99:     my $fmsg = "*$who has left the chat*";
        !           100:     sleep(1);
        !           101:     $webhook->execute($fmsg);
        !           102: }
        !           103: 
        !           104: 
        !           105: 
        !           106: $oscar->set_callback_signon_done(\&signon_done);
        !           107: $oscar->set_callback_chat_joined(\&chat_joined);
        !           108: $oscar->set_callback_im_in(\&im_in);
        !           109: $oscar->set_callback_chat_im_in(\&chat_im_in);
        !           110: #$oscar->set_callback_chat_buddy_in(\&chat_buddy_in);
        !           111: #$oscar->set_callback_chat_buddy_out(\&chat_buddy_out);
        !           112: 
        !           113: print "chatsync:  attempting to sign in... ";
        !           114: $oscar->signon(%signon);
        !           115: 
        !           116: while(1) {
        !           117:     $oscar->do_one_loop();        
        !           118: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>