From 1f8f2d381e3a9c7b47b330186364b45c9e6ca4eb Mon Sep 17 00:00:00 2001
From: Alexandre Morignot <amorignot@meilleursagents.com>
Date: Sat, 15 Jul 2023 17:24:23 +0200
Subject: [PATCH] feat(sites): Use PlayBot.go

---
 PlayBot/sites.pm | 78 +++++++++++++++++++++++++++++++++---------------
 1 file changed, 54 insertions(+), 24 deletions(-)

diff --git a/PlayBot/sites.pm b/PlayBot/sites.pm
index 94b89c5..1b09c2c 100644
--- a/PlayBot/sites.pm
+++ b/PlayBot/sites.pm
@@ -22,6 +22,29 @@ our $log;
 our $regex;
 our $playbot_api_key;
 
+sub external_parse {
+    my $url = shift;
+
+    my $content = `./PlayBot.go "$url"`;
+    if ( $? >> 8 != 0 ) {
+        die "Error";
+    }
+
+    my ( $matched_url, $external_id, $url, $title, $author, $duration ) =
+      split( /\n/, $content );
+
+    return (
+        author      => $author,
+        external_id => $external_id,
+        duration    => $duration,
+        matched_url => $matched_url,
+        playlist    => 0,
+        site        => 'soundcloud',
+        title       => $title,
+        url         => $url,
+    );
+}
+
 sub parse {
     my ( $kernel, $user, $chan, $msg, $playlist ) = @_;
     my ( $nick, $mask ) = split( /!/, $user );
@@ -33,32 +56,39 @@ sub parse {
     my $matching_url;
     my @matching_tags;
 
-    # parsing
-    foreach my $site ( __PACKAGE__->sites ) {
-        not grep { $site eq "PlayBot::sites::$_" } @{ $chan_conf->sites }
-          and next;
-
-        my @args;
-        if ( @args = ( $msg =~ $site->regex ) ) {
-            eval { %content = $site->get(@args) };
-            $matching_url = $&;
-            $content{playlist} = 0;
-            last;
-        }
-        elsif ( $site->can('regex_playlist')
-            and @args = ( $msg =~ $site->regex_playlist ) )
-        {
-            eval { %content = $site->get_playlist(@args) };
-            $matching_url = $&;
-            $content{playlist} = 1;
-            last;
+    eval { %content = external_parse($msg) };
+    if ($@) {
+        # parsing
+        foreach my $site ( __PACKAGE__->sites ) {
+            if ( not grep { $site eq "PlayBot::sites::$_" } @{ $chan_conf->sites } ) {
+            next;
+            }
+
+            my @args;
+            if ( @args = ( $msg =~ $site->regex ) ) {
+                eval { %content = $site->get(@args) };
+                $matching_url = $&;
+                $content{playlist} = 0;
+                last;
+            }
+            elsif ( $site->can('regex_playlist')
+                and @args = ( $msg =~ $site->regex_playlist ) )
+            {
+                eval { %content = $site->get_playlist(@args) };
+                $matching_url = $&;
+                $content{playlist} = 1;
+                last;
+            }
         }
-    }
 
-    # something goes wrong ?
-    if ($@) {
-        $log->warning($@);
-        return;
+        # something goes wrong ?
+        if ($@) {
+            $log->warning($@);
+            return;
+        }
+    } else {
+        $matching_url = $content{matched_url};
+        delete $content{matched_url};
     }
 
     my $id;
-- 
GitLab