// be sure to include desired char img as "img.png" in same dir as this script

// npm install @supabase/supabase-js axios lorem-ipsum
// node script.js

const supabase = require("@supabase/supabase-js");
const axios = require("axios");
const fs = require("fs");
const lorem = require("lorem-ipsum");

const loreminstance = new lorem.LoremIpsum({
    sentencesPerParagraph: {
        max: 8,
        min: 4,
    },
    wordsPerSentence: {
        max: 16,
        min: 4,
    },
});

const YOUR_HANDLE = "hackerknownas4chin";

const spam = async () => {
    const client = supabase.createClient(
        "https://cvochnalpmpanziphini.supabase.co",
        "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImN2b2NobmFscG1wYW56aXBoaW5pIiwicm9sZSI6ImFub24iLCJpYXQiOjE2Nzc0NjU0NzgsImV4cCI6MTk5MzA0MTQ3OH0.xK0agdVii9VZCdNplqJEtHwD2-wb53Z9WJDeRAA6V0Q",
        {
            auth: { persistSession: false },
        }
    );
    // create account
    const password = Math.random().toString(36).substring(2, 14);
    const result = await client.auth.signUp({
        email: `${Math.random().toString(36).substring(2, 14)}@gmail.com`,
        password,
    });
    if (result.error) {
        console.log(result.error);
        throw new Error("axios error creating account");
    }
    const { user, session, error } = result.data;
    if (error) {
        console.log(error);
        throw new Error("api error creating account");
    }
    console.log("username and password", user.email, password);
    await client.auth.setSession({
        access_token: session.access_token,
        refresh_token: session.refresh_token,
    });
    // set handle
    const axiosopts = { headers: { Authorization: `Bearer ${session.access_token}` } };
    const handledata = {
        about_me: "",
        avatar: "",
        name: `${YOUR_HANDLE}${Math.random().toString(36).substring(2, 6)}`,
        user_name: `${YOUR_HANDLE}${Math.random().toString(36).substring(2, 6)}`,
    };
    await axios.patch("https://api.venusai.chat/profiles/mine", handledata, { ...axiosopts });
    // stage card img
    const img = fs.readFileSync("./img.png");
    let avatar = "";
    const uploadedavatar = await client.storage
        .from("bot-avatars")
        .upload(`${Math.random().toString(36).substring(2, 14)}.png`, img, { cacheControl: "180", upsert: true });
    if (uploadedavatar?.data?.path) {
        avatar = uploadedavatar.data.path;
    } else {
        console.log("Error uploading avatar");
        console.log(uploadedavatar.error);
        throw new Error("Error uploading avatar " + uploadedavatar.error);
    }
    console.log("avatar path", avatar);
    // create card
    const cardbody = getCard(avatar);
    const card = await axios.post("https://api.venusai.chat/characters", cardbody, { ...axiosopts });
    console.log("card", card.data);
};

(async () => {
    while (true) {
        const accounts = Array.from({ length: 10 }, () => spam());
        try {
            const results = await Promise.allSettled(accounts);
            results.forEach((result) => {
                if (result.status === "rejected") {
                    console.log(result.reason);
                }
            });
        } catch (e) {
            console.log(e);
        }
        await new Promise((resolve) => setTimeout(resolve, 5000));
    }
})();

function getCard(avatarUrl) {
    const chara = {
        name: loreminstance.generateWords(4),
        description: loreminstance.generateWords(10),
        tag_ids: [3, 7, 13],
        is_public: true,
        is_nsfw: false,
        personality: loreminstance.generateParagraphs(8),
        first_message: loreminstance.generateParagraphs(3),
        scenario: "",
        example_dialogs: "",
        avatar: avatarUrl,
    };
    chara.name += `${Math.random().toString(36).substring(2, 14)}`;
    chara.description += `${Math.random().toString(36).substring(2, 14)}`;
    chara.personality += `${Math.random().toString(36).substring(2, 14)}`;
    chara.first_message += `${Math.random().toString(36).substring(2, 14)}`;
    chara.scenario += `${Math.random().toString(36).substring(2, 14)}`;
    return chara;
}
Edit Report
Pub: 23 May 2023 08:26 UTC
Edit: 23 May 2023 08:52 UTC
Views: 250