Skip to content

Commit 02d0b4d

Browse files
konardclaude
andcommitted
Add copy languages command functionality
- Add COPY_LANGUAGES regex pattern for 'copy languages' and 'копировать языки' commands - Implement copy_languages method in Commands class to copy programming languages from forwarded message user - Register the new command in main bot file - Update README.md with command documentation and Russian alias - Command requires forwarded message to select source user - Handles edge cases: no forwarded message, self-copy attempts, source user without languages - Provides user feedback on successful copies and already-existing languages Fixes #95 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent cb250d8 commit 02d0b4d

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

python/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
|| -= [ЯЗЫК] | Убрать язык программирования из своего профиля. |
3232
|| += [ССЫЛКА] | Добавить ссылку на профиль github в свой профиль. |
3333
|| -= [ССЫЛКА] | Убрать ссылку на профиль github из своего профиля. |
34+
|| copy languages | Скопировать языки программирования из профиля другого пользователя (требует перешлите сообщение пользователя). |
3435
|| what is [] | Искать в википедии |
3536

3637
Так же возможно использование альтернативных названий команд.
@@ -44,6 +45,7 @@
4445
| karma | карма|
4546
| info | инфо |
4647
| update | обновить |
48+
| copy languages | копировать языки |
4749
| what is | что такое |
4850

4951
![image](https://user-images.githubusercontent.com/1431904/146941784-670f052c-7b4e-4367-89c5-00466dfc92c9.png)

python/__main__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ def __init__(
6363
(patterns.WHAT_IS, self.commands.what_is),
6464
(patterns.WHAT_MEAN, self.commands.what_is),
6565
(patterns.APPLY_KARMA, self.commands.apply_karma),
66-
(patterns.GITHUB_COPILOT, self.commands.github_copilot)
66+
(patterns.GITHUB_COPILOT, self.commands.github_copilot),
67+
(patterns.COPY_LANGUAGES, self.commands.copy_languages)
6768
)
6869

6970
def message_new(

python/modules/commands.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,47 @@ def github_copilot(self) -> NoReturn:
379379
f'Пожалуйста, подождите {round(config.GITHUB_COPILOT_TIMEOUT - (now - self.now))} секунд', self.peer_id
380380
)
381381

382+
def copy_languages(self) -> NoReturn:
383+
"""Copy programming languages from another user's profile"""
384+
if not self.user or self.user.uid == self.from_id:
385+
self.vk_instance.send_msg(
386+
'Перешлите сообщение пользователя, чьи языки программирования вы хотите скопировать.',
387+
self.peer_id
388+
)
389+
return
390+
391+
source_languages = self.data_service.get_user_sorted_programming_languages(self.user)
392+
if not source_languages:
393+
self.vk_instance.send_msg(
394+
f'У [id{self.user.uid}|{self.vk_instance.get_user_name(self.user.uid)}] не указано языков программирования.',
395+
self.peer_id
396+
)
397+
return
398+
399+
# Copy languages to current user
400+
current_languages = self.current_user.programming_languages
401+
new_languages = list(set(current_languages + source_languages))
402+
self.current_user.programming_languages = new_languages
403+
self.data_service.save_user(self.current_user)
404+
405+
# Send confirmation message
406+
copied_count = len(source_languages)
407+
total_count = len(new_languages)
408+
already_had = len(current_languages)
409+
new_added = total_count - already_had
410+
411+
if new_added == 0:
412+
self.vk_instance.send_msg(
413+
f'Все языки программирования от [id{self.user.uid}|{self.vk_instance.get_user_name(self.user.uid)}] у вас уже есть.',
414+
self.peer_id
415+
)
416+
else:
417+
self.vk_instance.send_msg(
418+
f'Скопировано {new_added} новых языков программирования от [id{self.user.uid}|{self.vk_instance.get_user_name(self.user.uid)}]. '
419+
f'У вас теперь {total_count} языков программирования.',
420+
self.peer_id
421+
)
422+
382423
def match_command(
383424
self,
384425
pattern: Pattern

python/patterns.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,6 @@
6565
GITHUB_COPILOT = recompile(
6666
r'\A\s*(code|код)\s+(?P<lang>(' + COPILOT_LANGUAGES +
6767
r'))(?P<text>[\S\s]+)\Z', IGNORECASE)
68+
69+
COPY_LANGUAGES = recompile(
70+
r'\A\s*(copy|копировать)\s+(languages|языки)\s*\Z', IGNORECASE)

0 commit comments

Comments
 (0)