# Code Examples

This section contains a few bits of code for things you might want to do with Plugins.

## **Write messages to the Plugin Log**

```perl
# Import the LRR logging module
use LANraragi::Utils::Logging qw(get_plugin_logger);
# Use the logger to output status - they'll be passed to a specialized logfile and written to STDOUT.
my $logger = get_plugin_logger();

$plugin->debug("This message will only show if LRR is in Debug Mode")
$plugin->info("You know me the fighting freak Knuckles and we're at Pumpkin Hill");
$plugin->warn("You ready?");
$plugin->error("Oh no");
```

The logger is a preconfigured [Mojo::Log](http://mojolicious.org/perldoc/Mojo/Log) object.

## **Make requests to a remote WebService**

[Mojo::UserAgent](http://mojolicious.org/perldoc/Mojo/UserAgent) is a full-featured HTTP client coming with LRR you can use.

```perl
use Mojo::UserAgent;

my $ua = $lrr_info->{user_agent};

#Get HTML from a simple GET request
$ua->get("http://example.com")->result->body;

#Make a POST request and get the JSON result
my $rep = $ua->post(
        "https://jsonplaceholder.typicode.com/" => json => {
            stage  => "Meteor Herd",
            location   => [ [ "space", "colony" ] ],
            emeralds => 3
        }
    )->result;

#JSON decoded to a perl object
my $jsonresponse = $rep->json;

#JSON decoded to a string
my $textrep      = $rep->body;
```

## **Read values in the LRR Database**

```perl
my $redis = LANraragi::Model::Config->get_redis;

my $value = $redis->get("key");
```

This uses the excellent [Perl binding library](http://search.cpan.org/~dams/Redis-1.991/lib/Redis.pm) for Redis.

## **Extract files from the archive being examined**

If you're running 0.5.2 or later:

```perl
use LANraragi::Utils::Archive qw(is_file_in_archive extract_file_from_archive);

# Check if info.json is in the archive located at $file and get its precise path
my $info_path = is_file_in_archive($file, "info.json");
if ($info_path) {

        #Extract info.json
        my $filepath = extract_file_from_archive($file, $info_path);

        #Do whatever you need with the extracted file
        open( my $fh, '<:encoding(UTF-8)', $filepath )
          or die "Could not open $filepath!\n";

        while ( my $row = <$fh> ) {
            #...
        }

        #Delete it
        unlink $filepath;
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sugoi.gitbook.io/lanraragi/plugin-docs/code-examples.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
