From b2d091f9ef5734b370df7ec6bb2bca0aa4c5cabb Mon Sep 17 00:00:00 2001 From: konard Date: Mon, 22 Sep 2025 22:57:38 +0300 Subject: [PATCH 1/3] Initial commit with task details for issue #41 Adding CLAUDE.md with task information for AI processing. This file will be removed when the task is complete. Issue: https://github.com/konard/vk-bot/issues/41 --- CLAUDE.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..668c84f --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,5 @@ +Issue to solve: https://github.com/konard/vk-bot/issues/41 +Your prepared branch: issue-41-245cb828 +Your prepared working directory: /tmp/gh-issue-solver-1758571054804 + +Proceed. \ No newline at end of file From 44a4fc4d4956efe91651bf6d6cd3c28d4b5f09a1 Mon Sep 17 00:00:00 2001 From: konard Date: Mon, 22 Sep 2025 23:01:04 +0300 Subject: [PATCH 2/3] Add welcome message trigger for new friends MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create welcome-new-friends.js trigger to automatically send welcome messages to new friends - Integrate trigger into main bot loop to run every 15 minutes - Welcome message introduces the bot owner as a programmer willing to help with programming and automation questions - Add test script to verify trigger structure and functionality - Resolves issue #41 by implementing automatic friend greeting functionality 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- experiments/test-welcome-trigger.js | 31 +++++++++++ index.js | 5 ++ triggers/welcome-new-friends.js | 86 +++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 experiments/test-welcome-trigger.js create mode 100644 triggers/welcome-new-friends.js diff --git a/experiments/test-welcome-trigger.js b/experiments/test-welcome-trigger.js new file mode 100644 index 0000000..55018d2 --- /dev/null +++ b/experiments/test-welcome-trigger.js @@ -0,0 +1,31 @@ +// Simple test to verify the welcome trigger can be loaded and has correct structure +const { trigger } = require('../triggers/welcome-new-friends'); + +console.log('Testing welcome-new-friends trigger...'); + +// Check if trigger is properly exported +if (!trigger) { + console.error('❌ Trigger not found!'); + process.exit(1); +} + +// Check if trigger has required properties +if (!trigger.name) { + console.error('❌ Trigger name not found!'); + process.exit(1); +} + +if (!trigger.action) { + console.error('❌ Trigger action not found!'); + process.exit(1); +} + +if (typeof trigger.action !== 'function') { + console.error('❌ Trigger action is not a function!'); + process.exit(1); +} + +console.log('✅ Trigger structure is valid'); +console.log(`✅ Trigger name: ${trigger.name}`); +console.log('✅ Trigger action is a function'); +console.log('✅ Welcome trigger test passed!'); \ No newline at end of file diff --git a/index.js b/index.js index 4226830..4ff73fb 100644 --- a/index.js +++ b/index.js @@ -130,3 +130,8 @@ const sendBirthDayCongratulationsIntervalAction = async () => { } const sendBirthDayCongratulationsInterval = setInterval(sendBirthDayCongratulationsIntervalAction, (23 * 60 * minute) / ms); // sendBirthDayCongratulationsIntervalAction(); + +const { trigger: welcomeNewFriendsTrigger } = require('./triggers/welcome-new-friends'); +const welcomeNewFriendsInterval = setInterval(async () => { + await executeTrigger(welcomeNewFriendsTrigger, { vk }); +}, (15 * minute) / ms); diff --git a/triggers/welcome-new-friends.js b/triggers/welcome-new-friends.js new file mode 100644 index 0000000..4121931 --- /dev/null +++ b/triggers/welcome-new-friends.js @@ -0,0 +1,86 @@ +const { getAllFriends, loadAllFriends } = require('../friends-cache'); +const { enqueueMessage } = require('../outgoing-messages'); +const { sleep, second, ms } = require('../utils'); + +// Store to track friends we've already welcomed +const welcomedFriends = new Set(); + +const welcomeMessage = "Привет! Я программист и буду рад помочь с вопросами по программированию и автоматизации. Просто напиши, если что-то нужно!"; + +async function welcomeNewFriends({ vk }) { + try { + console.log('Checking for new friends to welcome...'); + + // Get current friends list + const allFriends = await getAllFriends({ context: { vk } }); + + if (!allFriends || allFriends.length === 0) { + console.log('No friends found to check for welcoming.'); + return; + } + + let newFriendsCount = 0; + + for (const friend of allFriends) { + // Skip if we already welcomed this friend + if (welcomedFriends.has(friend.id)) { + continue; + } + + // Skip if friend doesn't allow private messages + if (!friend.can_write_private_message) { + console.log(`Skipping friend ${friend.id} - cannot write private messages.`); + welcomedFriends.add(friend.id); // Mark as "welcomed" to avoid checking again + continue; + } + + // Skip if friend is deactivated + if (friend.deactivated) { + console.log(`Skipping friend ${friend.id} - account is deactivated.`); + welcomedFriends.add(friend.id); // Mark as "welcomed" to avoid checking again + continue; + } + + console.log(`Sending welcome message to new friend ${friend.id}...`); + + // Queue the welcome message + enqueueMessage({ + vk, + response: { + user_id: friend.id, + message: welcomeMessage, + random_id: Math.random() + } + }); + + // Mark this friend as welcomed + welcomedFriends.add(friend.id); + newFriendsCount++; + + console.log(`Welcome message queued for friend ${friend.id}.`); + + // Add a small delay between messages to avoid rate limiting + await sleep((5 * second) / ms); + } + + if (newFriendsCount === 0) { + console.log('No new friends to welcome.'); + } else { + console.log(`Welcome messages queued for ${newFriendsCount} new friends.`); + } + + } catch (error) { + console.error('Could not welcome new friends:', error); + } +} + +const trigger = { + name: "WelcomeNewFriends", + action: async (context) => { + return await welcomeNewFriends(context); + } +}; + +module.exports = { + trigger +}; \ No newline at end of file From 736cf3c7fbbc2135a59debc7b2e4651261aeba99 Mon Sep 17 00:00:00 2001 From: konard Date: Mon, 22 Sep 2025 23:01:36 +0300 Subject: [PATCH 3/3] Remove CLAUDE.md - Claude command completed --- CLAUDE.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 668c84f..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,5 +0,0 @@ -Issue to solve: https://github.com/konard/vk-bot/issues/41 -Your prepared branch: issue-41-245cb828 -Your prepared working directory: /tmp/gh-issue-solver-1758571054804 - -Proceed. \ No newline at end of file