Skip to content

Commit

Permalink
Merge pull request elizaOS#1698 from daizhengxue/main
Browse files Browse the repository at this point in the history
chore: twitter username validation message
  • Loading branch information
shakkernerd authored Jan 2, 2025
2 parents b1f3b83 + d2d0dee commit 08b8d2e
Showing 1 changed file with 62 additions and 49 deletions.
111 changes: 62 additions & 49 deletions packages/client-twitter/src/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@ import { z, ZodError } from "zod";

export const DEFAULT_MAX_TWEET_LENGTH = 280;

const twitterUsernameSchema = z.string()
.min(1, 'An X/Twitter Username must be at least 1 characters long')
.max(15, 'n X/Twitter Username cannot exceed 15 characters')
.regex(/^[A-Za-z0-9_]*$/, 'n X Username can only contain letters, numbers, and underscores');
const twitterUsernameSchema = z
.string()
.min(1, "An X/Twitter Username must be at least 1 characters long")
.max(15, "An X/Twitter Username cannot exceed 15 characters")
.regex(
/^[A-Za-z0-9_]*$/,
"An X Username can only contain letters, numbers, and underscores"
);

/**
* This schema defines all required/optional environment settings,
Expand Down Expand Up @@ -75,7 +79,10 @@ function parseTargetUsers(targetUsersStr?: string | null): string[] {
.filter(Boolean);
}

function safeParseInt(value: string | undefined | null, defaultValue: number): number {
function safeParseInt(
value: string | undefined | null,
defaultValue: number
): number {
if (!value) return defaultValue;
const parsed = parseInt(value, 10);
return isNaN(parsed) ? defaultValue : Math.max(1, parsed);
Expand All @@ -90,13 +97,15 @@ function safeParseInt(value: string | undefined | null, defaultValue: number): n

// we also do a lot of typing/parsing here
// so we can do it once and only once per character
export async function validateTwitterConfig(runtime: IAgentRuntime): Promise<TwitterConfig> {
export async function validateTwitterConfig(
runtime: IAgentRuntime
): Promise<TwitterConfig> {
try {
const twitterConfig = {
TWITTER_DRY_RUN:
parseBooleanFromText(
runtime.getSetting("TWITTER_DRY_RUN") ||
process.env.TWITTER_DRY_RUN
process.env.TWITTER_DRY_RUN
) ?? false, // parseBooleanFromText return null if "", map "" to false

TWITTER_USERNAME:
Expand All @@ -111,80 +120,84 @@ export async function validateTwitterConfig(runtime: IAgentRuntime): Promise<Twi
runtime.getSetting("TWITTER_EMAIL") ||
process.env.TWITTER_EMAIL,

MAX_TWEET_LENGTH: // number as string?
safeParseInt(
runtime.getSetting("MAX_TWEET_LENGTH") ||
// number as string?
MAX_TWEET_LENGTH: safeParseInt(
runtime.getSetting("MAX_TWEET_LENGTH") ||
process.env.MAX_TWEET_LENGTH,
DEFAULT_MAX_TWEET_LENGTH
),
DEFAULT_MAX_TWEET_LENGTH
),

TWITTER_SEARCH_ENABLE:
parseBooleanFromText(
runtime.getSetting("TWITTER_SEARCH_ENABLE") ||
process.env.TWITTER_SEARCH_ENABLE
process.env.TWITTER_SEARCH_ENABLE
) ?? false,

TWITTER_2FA_SECRET: // string passthru
// string passthru
TWITTER_2FA_SECRET:
runtime.getSetting("TWITTER_2FA_SECRET") ||
process.env.TWITTER_2FA_SECRET || "",
process.env.TWITTER_2FA_SECRET ||
"",

TWITTER_RETRY_LIMIT: // int
safeParseInt(
runtime.getSetting("TWITTER_RETRY_LIMIT") ||
// int
TWITTER_RETRY_LIMIT: safeParseInt(
runtime.getSetting("TWITTER_RETRY_LIMIT") ||
process.env.TWITTER_RETRY_LIMIT,
5
),
5
),

TWITTER_POLL_INTERVAL: // int in seconds
safeParseInt(
runtime.getSetting("TWITTER_POLL_INTERVAL") ||
// int in seconds
TWITTER_POLL_INTERVAL: safeParseInt(
runtime.getSetting("TWITTER_POLL_INTERVAL") ||
process.env.TWITTER_POLL_INTERVAL,
120 // 2m
),
120 // 2m
),

TWITTER_TARGET_USERS: // comma separated string
parseTargetUsers(
runtime.getSetting("TWITTER_TARGET_USERS") ||
// comma separated string
TWITTER_TARGET_USERS: parseTargetUsers(
runtime.getSetting("TWITTER_TARGET_USERS") ||
process.env.TWITTER_TARGET_USERS
),
),

POST_INTERVAL_MIN: // int in minutes
safeParseInt(
runtime.getSetting("POST_INTERVAL_MIN") ||
// int in minutes
POST_INTERVAL_MIN: safeParseInt(
runtime.getSetting("POST_INTERVAL_MIN") ||
process.env.POST_INTERVAL_MIN,
90 // 1.5 hours
),
90 // 1.5 hours
),

POST_INTERVAL_MAX: // int in minutes
safeParseInt(
runtime.getSetting("POST_INTERVAL_MAX") ||
// int in minutes
POST_INTERVAL_MAX: safeParseInt(
runtime.getSetting("POST_INTERVAL_MAX") ||
process.env.POST_INTERVAL_MAX,
180 // 3 hours
),
180 // 3 hours
),

ENABLE_ACTION_PROCESSING: // bool
// bool
ENABLE_ACTION_PROCESSING:
parseBooleanFromText(
runtime.getSetting("ENABLE_ACTION_PROCESSING") ||
process.env.ENABLE_ACTION_PROCESSING
process.env.ENABLE_ACTION_PROCESSING
) ?? false,

ACTION_INTERVAL: // init in minutes (min 1m)
safeParseInt(
runtime.getSetting("ACTION_INTERVAL") ||
// init in minutes (min 1m)
ACTION_INTERVAL: safeParseInt(
runtime.getSetting("ACTION_INTERVAL") ||
process.env.ACTION_INTERVAL,
5 // 5 minutes
),
5 // 5 minutes
),

POST_IMMEDIATELY: // bool
// bool
POST_IMMEDIATELY:
parseBooleanFromText(
runtime.getSetting("POST_IMMEDIATELY") ||
process.env.POST_IMMEDIATELY
process.env.POST_IMMEDIATELY
) ?? false,

TWITTER_SPACES_ENABLE:
parseBooleanFromText(
runtime.getSetting("TWITTER_SPACES_ENABLE") ||
process.env.TWITTER_SPACES_ENABLE
process.env.TWITTER_SPACES_ENABLE
) ?? false,
};

Expand Down

0 comments on commit 08b8d2e

Please sign in to comment.