Skip to content

Commit

Permalink
agent inits onoboarding
Browse files Browse the repository at this point in the history
  • Loading branch information
lalalune committed Feb 14, 2025
1 parent 521b636 commit 5ed9044
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 7 deletions.
3 changes: 2 additions & 1 deletion packages/agent/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { fileURLToPath } from "node:url";
import yargs from "yargs";
import { defaultCharacter } from "./single-agent/character.ts";
import { CharacterServer } from "./server/index.ts";
import swarm from "./the-org/index";
import swarm from "./swarm/index";

const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file
const __dirname = path.dirname(__filename); // get the name of the directory
Expand Down Expand Up @@ -434,6 +434,7 @@ const startAgents = async () => {
if (args.swarm) {
try {
for (const swarmMember of swarm) {
console.log("*** INIT", swarmMember.init)
await startAgent(
swarmMember.character,
characterServer,
Expand Down
15 changes: 14 additions & 1 deletion packages/agent/src/swarm/communityManager/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import dotenv from "dotenv";
dotenv.config({ path: "../../.env" });

import { Character, IAgentRuntime } from "@elizaos/core";
import { ChannelType, Guild, Message } from "discord.js";
import { Client, ChannelType, Guild, Message } from "discord.js";
import { initializeOnboarding } from "../shared/onboarding/initialize";
import { OnboardingConfig } from "../shared/onboarding/types";

Expand Down Expand Up @@ -378,6 +378,7 @@ const config: OnboardingConfig = {
export default {
character,
init: async (runtime: IAgentRuntime) => {
console.log("*** INIT", runtime)
// Register runtime events
runtime.registerEvent("DISCORD_JOIN_SERVER", async (params: { guild: Guild }) => {
console.log("Community manager joined server");
Expand All @@ -390,5 +391,17 @@ export default {
console.log("Community manager received message");
console.log(params);
});

runtime.registerEvent("DISCORD_CLIENT_STARTED", (params: { client: Client }) => {
console.log("Community manager started");
console.log(params);
});

// when booting up into a server we're in, fire a connected event
runtime.registerEvent("DISCORD_SERVER_CONNECTED", async (params: { guild: Guild }) => {
console.log("Community manager connected to server");
console.log(params);
await initializeOnboarding(runtime, params.guild.id, config);
});
}
};
18 changes: 16 additions & 2 deletions packages/agent/src/swarm/shared/onboarding/initialize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,21 @@ export async function initializeOnboarding(
config: OnboardingConfig
): Promise<void> {
try {
console.log("*** initializeOnboarding", runtime)
// Check if onboarding is already initialized
const existingState = await runtime.cacheManager.get<OnboardingState>(
`server_${serverId}_onboarding_state`
);

console.log("*** existingState", existingState)

if (existingState) {
logger.info(`Onboarding already initialized for server ${serverId}`);
return;
}

console.log("*** initializing onboarding")

// Initialize onboarding state with config settings
const initialState: OnboardingState = {
settings: Object.entries(config.settings).reduce((acc, [key, setting]) => ({
Expand All @@ -74,29 +79,37 @@ export async function initializeOnboarding(
completed: false
};

console.log("*** initialState", initialState)

// Save initial state
await runtime.cacheManager.set(
`server_${serverId}_onboarding_state`,
initialState
);

console.log("*** saved initialState")

// Cache the config for reference
await runtime.cacheManager.set(
`server_${serverId}_onboarding_config`,
config
);

// Get Discord client and server info
const discordClient = runtime.getClient("discord") as unknown as Client;
const discordClient = (runtime.getClient("discord") as any).client as Client;
console.log("discordClient", discordClient)
console.log("guilds", discordClient.guilds)
const guild = await discordClient.guilds.fetch(serverId);

// Set server owner as admin
const owner = await guild.members.fetch(guild.ownerId);
console.log("*** owner", owner)
await setUserServerRole(runtime, {
userId: owner.id,
serverId: serverId,
role: RoleName.ADMIN,
});
console.log("*** setUserServerRole")

// Start DM with owner
const onboardingMessages = [
Expand All @@ -107,7 +120,8 @@ export async function initializeOnboarding(

const randomMessage = onboardingMessages[Math.floor(Math.random() * onboardingMessages.length)];
await owner.send(randomMessage);

console.log("*** sent onboarding message")

logger.info(`Initialized onboarding for server ${serverId}`);
} catch (error) {
logger.error(`Failed to initialize onboarding for server ${serverId}:`, error);
Expand Down
23 changes: 21 additions & 2 deletions packages/agent/src/swarm/socialMediaManager/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Character, IAgentRuntime } from "@elizaos/core";
import { ChannelType, Guild } from 'discord.js';
import { Character, Client, IAgentRuntime } from "@elizaos/core";
import { ChannelType, Guild, Message } from 'discord.js';
import dotenv from "dotenv";
import { initializeOnboarding } from "../shared/onboarding/initialize";
import { type OnboardingConfig } from "../shared/onboarding/types";
Expand Down Expand Up @@ -275,7 +275,26 @@ export default {
runtime.registerEvent("DISCORD_JOIN_SERVER", async (params: { guild: Guild }) => {
console.log("Social media manager joined server");
console.log(params);
// TODO: Save onboarding config to runtime
await initializeOnboarding(runtime, params.guild.id, socialMediaManagerConfig);
});

runtime.registerEvent("DISCORD_MESSAGE_RECEIVED", (params: { message: Message }) => {
console.log("Social media manager received message");
console.log(params);
});

runtime.registerEvent("DISCORD_CLIENT_STARTED", (params: { client: Client }) => {
console.log("Social media manager started");
console.log(params);
});

// when booting up into a server we're in, fire a connected event
runtime.registerEvent("DISCORD_SERVER_CONNECTED", async (params: { guild: Guild }) => {
console.log("Social media manager connected to server");
console.log(params);
console.log("ID is", params.guild[0])
await initializeOnboarding(runtime, params.guild[0], socialMediaManagerConfig);
});
}
};
13 changes: 13 additions & 0 deletions packages/plugin-discord/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ export class DiscordClient extends EventEmitter implements IDiscordClient {
this.client.login(this.apiToken);

this.setupEventListeners();

// fire a connected event
this.runtime.emitEvent("DISCORD_CLIENT_STARTED", { client: this.client });
}

private setupEventListeners() {
Expand Down Expand Up @@ -377,11 +380,21 @@ export class DiscordClient extends EventEmitter implements IDiscordClient {
}

private async onReady() {
console.log("DISCORD ON READY")
const guilds = await this.client.guilds.fetch();
for (const [, guild] of guilds) {
const fullGuild = await guild.fetch();
this.voiceManager.scanGuild(fullGuild);
}

// send in 1 second
setTimeout(() => {
// for each server the client is in, fire a connected event
for (const guild of guilds) {
console.log("DISCORD SERVER CONNECTED", guild);
this.runtime.emitEvent("DISCORD_SERVER_CONNECTED", { guild });
}
}, 1000);
}
}

Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-twitter/src/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const twitterEnvSchema = z.object({
TWITTER_PASSWORD: z.string().min(1, "X/Twitter password is required"),
TWITTER_EMAIL: z.string().email("Valid X/Twitter email is required"),
MAX_TWEET_LENGTH: z.number().int().default(DEFAULT_MAX_TWEET_LENGTH),
TWITTER_2FA_SECRET: z.string(),
TWITTER_2FA_SECRET: z.string().default(undefined),
TWITTER_RETRY_LIMIT: z.number().int(),
TWITTER_POLL_INTERVAL: z.number().int(),
TWITTER_TARGET_USERS: z.array(twitterUsernameSchema).default([]),
Expand Down
5 changes: 5 additions & 0 deletions packages/plugin-twitter/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ export class TwitterClientManager {
}

async createClient(runtime: IAgentRuntime, clientId: string, config: TwitterConfig): Promise<TwitterClient> {
console.log("Creating client", clientId, config);
// if TWITTER_2FA_SECRET === null, delete it
if (config.TWITTER_2FA_SECRET === null) {
delete config.TWITTER_2FA_SECRET;
}
try {
// Check if client already exists
const existingClient = this.getClient(clientId, runtime.agentId);
Expand Down

0 comments on commit 5ed9044

Please sign in to comment.