npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@faurinfox/cleverbot

v1.2.1

Published

Provides a wrapper/client for the official Cleverbot API

Downloads

5

Readme

Cleverbot

In order to use this package, you need to first obtain a Cleverbot API key here.

Installation

npm install --save @faurinfox/cleverbot

Highlighted changes

As of version 1.1.0, Cleverbot tweaking parameters have been implemented to this package. These allow you to modify the "mood" of its responses. Cleverbot simply calls these tweaks tweak1, tweak2, tweak3. However, i have renamed them for use in this package. Below are these renames in the same order, as well as what they control.

  • wackiness, controls from sensible to wacky
  • talkativeness, controls from shy to talkative
  • attentiveness, controls from self-centered to attentive

Each of these values must be an integer between 0 and 100. If left undeclared, whatever Cleverbot defaults to will be used.

Only the first example under Usage section below has been updated to show the use of these tweaks. As of version 1.2.0, these tweaks can be altered with the setTweak function. Previously they were used in the same object as the cs parameter, but that approach, while still supported, is now discouraged.

If the introduction of these changes broke things for you, please create an issue on the GitHub page in order to let me know about them.

Usage

There are a few ways to use this package. We'll start with a import style, which i recommend using whenever possible.

The example below will be a full script, the other examples after it will be modifications, but not include the entire thing every time.

This example script will use both async/await as well as .then() methods.

import Cleverbot from '@faurinfox/cleverbot';

(function() {
    const apiKey = "YOUR_API_KEY";
    const CB = new Cleverbot({
        key: apiKey
    });
    // Hardcoded input just because this is an example
    let inputMsg = "Hi there!";
    // Use this variable to keep track of cs, in order to carry on a conversation
    let csStr = undefined;
    // If using within a function, that function should be a async one
    async function example() {
      // Check if csStr is undefined or not
        if (csStr !== undefined) {
          // It is not, so continue and pass it to the query
          // This is also demonstrating how to use this with async function and await
            try {
                // As of v1.1.0, the same object we use to pass cs(Str), can also be
                // used to set Cleverbot tweaks you wish to use.
                // Below is an example of doing just that:
                /*
                let CbTweaks = {wackiness: 70, talkativeness: 50, attentiveness: 50};
                let reply = await CB.query(inputMsg, {cs: csStr, ...CbTweaks});
                */
                // However, as of v1.2.0, the function approach is preferred.
                // while the object approach introduced in v1.1.0
                // is still supported, it is now discouraged as the new function one is preferred.
                CB.setTweak('wackiness', 70);
                CB.setTweak('talkativeness', 50);
                CB.setTweak('attentiveness', 50);
                // Alternatively, there is also
                // CB.setWackiness(70). Both do the same thing. Similar functions also exist for the other two tweaks.
                let reply = await CB.query(inputMsg, {cs: csStr});
                // CB.query used above will return a JSON with the reply received from Cleverbot API, as well as an added 'URL' property should you need to know the URL that was called to receive that response
                // We do not need the entire JSON, only the reply, thus use .output
                console.log("Reply: "+reply.output);
                // If you need the URL that was called, you would get it as such:
                console.log(reply.URL);
            } catch (error) {
              // We'll just log the error if one happens
                console.error(error);
            }
        }else if (csStr === undefined) {
          // csStr is undefined, therefore we don't have conversation to continue
          // This part is essentially the same as async/await above, but using a then() instead. As such, i will not comment it specifically.
            CB.query(inputMsg)
            .then(function(response) {
                console.log(response.output);
                console.log(response.URL)
                csStr = response.cs;
                // We run the function again here so that the change to csStr is registered, and the first if statement can therefore run. Again, this is for demonstration purposes.
                example();
            })
            .catch((e) => {
                console.error(e);
            });
        }
    }
    example();
})();

Another way of importing it is in CommonJS instead, though this import differs from the recommended one.

Note however, that importing this package this way requires the import to be within an async function!

For that, here's how you would import it:

(async function() {
const Cleverbot = (await import('@faurinfox/cleverbot')).default;
    // And the code continues the same as in the first example above
    // ...
})();

Alternatively, you could also:

const apiKey = "YOUR_API_KEY";
(async function() {
    return new Promise(async (resolve, reject) => {
        try {
            const Clever = (await import('@faurinfox/cleverbot')).default;
            resolve(new Clever({
                key: apiKey
            }));
        } catch (error) {
            reject(error);
        }
    });
})().then((c) => {
    // And carry on the code from there, wrapped in this .then
  const Cleverbot = c;
  Cleverbot.query(...).then(...)
  // ^ Placeholder for your actual query
}).catch((err) => {
  console.error(err);
});

Or you could use let instead of a const to avoid wrapping everything in the .then

const apiKey = "YOUR_API_KEY";
let Cleverbot;
(async function() {
  const Clever = (await import('@faurinfox/cleverbot')).default;
  Cleverbot = new Clever({
    key: apiKey
  });
})();
// This, however, does mean that you need to wait until Cleverbot variable is assigned before using it

But that shall be the end of CommonJS method guidance. I would prefer for you to use the import Cleverbot from '@faurinfox/cleverbot';, but i also want you to be able to use this package in CommonJS as well, and as such, i hope at least one of these examples helped you to do so.

Avoid this

This package does also support callbacks as the third argument to the query function. However, the use of them is heavily discouraged, i recommend using any of the previously shown methods instead.

Nevertheless, to use it via a callback would be:

// First import as normal
import Cleverbot from '@faurinfox/cleverbot';
// Once imported, we can send a query without having a 'cs' key to pass to it, using a callback
const apiKey = "YOUR_API_KEY";
const CB = new Cleverbot({
  key: apiKey
});
// Again, hardcoded input just because this is an example
let inputMsg = "Hi there!";

CB.query(inputMsg, null, function(response) {
  console.log(response.output)
});
// The null passed to query above is where you would put your object with the 'cs' key
// if you have one to pass, it would instead look like this
CB.query(inputMsg, {cs: "YOUR_CS_KEY"}, function(response) {
  console.log(response.output)
});

Do note though that these examples are just that, examples. Most of them likely will not run as a standalone file on their own. You will need to adapt them to your needs.

Back to top.