Annotation of ChivanetAimDiscordSyncBot/chatsync.pl, revision 1.1.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>