October 14

VK API

(меню)

Библиотеки

pip install vk_api

import vk_api

from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

from vk_api.exceptions import ApiError

Факты

  • id юзера больше 0, id группы меньше 0
  • id чата больше 2000000000, id чата равно id юзера это личка
  • action, payload, ответ если не равно None тогда они есть

Методы VK API

vk.messages.removeChatUser(chat_id=chat_id, member_id=member_id)

Кикает юзера из чата

messages.getConversationsById

Получает информацию о чате создателя и админов. По создателю можно определить тип чата.

chat = vk.messages.getConversationsById(peer_ids=peer_id)

sozd = chat['items'][0]['chat_settings']['owner_id']

users.get

Получает информацию про юзера

groups.getById

Получает информацию про группу

messages.send

Отправляет сообщении

vk.utils.resolveScreenName(screen_name="diodiodiodiodiodiodiodiodiodio")

vk.users.get(user_ids=[754256057, 816039462, 815994979], fields="sex")

vk.groups.getById(group_id=abs(from_id))

открепить vk.messages.unpin(peer_id=peer_id)
закрепить vk.messages.pin(peer_id=peer_id, conversation_message_id=sms_id)
аватарка(удалить) vk.messages.deleteChatPhoto(chat_id=chat_id)
сменить название vk.messages.editChat(chat_id=chat_id, title=title)
информация(участники) vk.messages.getConversationMembers(peer_id=peer_id, fields=fields)
информация(беседа) vk.messages.getConversationsById(peer_ids=peer_ids)

отправить простое сообщение vk.messages.send(peer_id=peer_id, random_id=0, message=message, attachment=attachment)
отправить сообщение с ответом
forward = {"peer_id": peer_id, "conversation_message_ids": sms_id, "is_reply": 0}
vk.messages.send(peer_id=peer_id, random_id=0, message=message, attachment=attachment, forward=json.dumps(forward))
удалить сообщение vk.messages.delete(peer_id=peer_id, cmids=sms_id, delete_for_all=1)
сообщение с кнопками vk.messages.send(peer_id=peer_id, random_id=0, message=message, keyboard=json.dumps(keyboard))
редактировать сообщение vk.messages.edit(peer_id=peer_id, conversation_message_id=sms_id, message=message)
сканировать сообщение vk.messages.getByConversationMessageId(peer_id=peer_id, conversation_message_ids=sms_id)
пользователь(информация) vk.users.get(user_ids=user_ids, fields=fields)
ссылка(сократить) vk.utils.getShortLink(url=url)
домен(сканировать) vk.utils.resolveScreenName(screen_name=screen_name)
vk.groups.getById(group_id=abs(from_id))[0]
vk.messages.isMessagesFromGroupAllowed(group_id=225327458, user_id=845322500)
vk.messages.getInviteLink(peer_id=peer_id)["link"]
vk.messages.getById(message_ids=[sms_id])

Полезная нагрузка

def PAYLOAD(payload):
Удаляем начальный и конечный теги "payload" из строки
payload = payload.replace('{"payload":"', '')
payload = payload.replace('"}', '')
Разбиваем строку на отдельные элементы
payload = payload.split()
Возвращаем полученный массив
return payload

Проверяем, не является ли payload None
if payload != None:
Если не None, то обрабатываем строку с помощью функции PAYLOAD
payload = PAYLOAD(payload)

Пример использования функции PAYLOAD
a = {"payload": "принять {from_id} {from_id}"}
Конвертируем словарь в строку JSON
a = json.dumps(a)

Простыми словами полезная нагрузка это тайная строка не видна взору человеческому внутри сообщения которое может распознать бот. Обычно в сообщении юзера оно может быть если он нажимает текстовую кнопку или в сообщении бота если он словарь конвертирует и передает методу

Кнопки

t = '{"payload": ' + f'"принять {from_id2} {from_id}"' + '}'
print(t)

keyboard = {}
keyboard["inline"] = True
keyboard["buttons"] = []
keyboardSTR = []
KEYBOARD = {}
KEYBOARD["action"] = {}
KEYBOARD["color"] = "secondary"
KEYBOARD["action"]["type"] = "text"
KEYBOARD["action"]["payload"] = t
KEYBOARD["action"]["label"] = "Принять"
keyboardSTR.append(KEYBOARD)
keyboard["buttons"].append(keyboardSTR)

prof = BINOPEN(f"DB/USERS/{from_id}/prof.bin")
prof2 = BINOPEN(f"DB/USERS/{from_id2}/prof.bin")

vk.messages.send(peer_id=peer_id, keyboard=json.dumps(keyboard), random_id=0, message=f"{prof2[2]} вам предлогает брак {prof[2]}", payload=json.dumps(p))

if rimuru == "монетка":
keyboard = {}
keyboard["inline"] = True

slovarik = {}
slovarik["action"] = {}
slovarik["action"]["type"] = "text"
slovarik["action"]["payload"] = '{"монетка": 100}'
slovarik["action"]["label"] = "Орел"

slovarik2 = {}
slovarik2["action"] = {}
slovarik2["action"]["type"] = "text"
slovarik2["action"]["payload"] = '{"монетка": 100}'
slovarik2["action"]["label"] = "Решка"

stroka = []
stroka.append(slovarik)
stroka.append(slovarik2)

slovarik3 = {}
slovarik3["action"] = {}
slovarik3["action"]["type"] = "text"
slovarik3["action"]["payload"] = '{"монетка": 100}'
slovarik3["action"]["label"] = "Оказаться от вызова"

stroka2 = []
stroka2.append(slovarik3)

button_stroka = []
button_stroka.append(stroka)
button_stroka.append(stroka2)

keyboard["buttons"] = button_stroka

pprint.pprint(keyboard)
return keyboard

kkk = {
"inline": True,
"buttons": [
[
{
"action":{
"type":"text",
"payload":"{\"button\": \"1\"}",
"label":"Принять"
},
"color":"negative"
}
]
]
}
vk.messages.send(peer_id=peer_id, random_id=0, message="кнопка", keyboard=json.dumps(kkk))

Действие в чате

if action["type"] == "chat_invite_user" and from_id == action["member_id"]

action["type"] == "chat_invite_user" and from_id != action["member_id"]

vk.messages.send(peer_id=peer_id, random_id=0, message="Я ухожу")

vk.messages.removeChatUser(chat_id=chat_id, member_id=-225327458)

action["type"] == "chat_kick_user" and from_id == action["member_id"]

action["type"] == "chat_kick_user" and from_id != action["member_id"]

Добавьте условия и логику для других типов действий, таких как "chat_create", "chat_delete", "chat_edit", "chat_join_by_link" и т. д.

Извлекаем данные из event

message = event.obj.message
chat_id = event.chat_id

pprint.pprint(message)
print("\n")

peer_id = message["peer_id"]
from_id = message["from_id"]
sms_id = message["conversation_message_id"]
date = message["date"]
att = message["attachments"]
fwd_messages = message["fwd_messages"]
text = message["text"]
action = message.get("action")
reply_message = message.get("reply_message")
payload = message.get("payload")

Разное

reply_message

text2.replace('<$mavan>', "Маван Туоминен")

forward = {"peer_id": peer_id, "conversation_message_ids": sms_id, "is_reply": 0}
vk.messages.send(peer_id=peer_id, random_id=0, message=p, disable_mentions=1, forward=json.dumps(forward))

c.sort(key=lambda x: x[0], reverse=True)

m = "&#128241;" if o.get("online_mobile") == 1 else "&#128187;"

vk.messages.getConversationsById(peer_ids=peer_id)

Проверка медиавложений

# Проверяем, есть ли вложения
if len(att) != 0:
for at in att:
# Проверяем тип вложения
if at['type'] == "photo":
# Получаем информацию о фотографии
photo_owner_id = at['photo']['owner_id']
photo_id = at['photo']['id']
photo_access_key = at['photo']['access_key']
# Выводим информацию о фотографии
print(f"Фотография: {photo_owner_id}, {photo_id}, {photo_access_key}")

elif at['type'] == "sticker":
# Получаем идентификатор стикера
print(f"Стикер: {at['sticker']['id']}")

elif at['type'] == "audio":
# Получаем файл аудиозаписи
audio_file = at['audio']['file']
# Выводим информацию о файле аудиозаписи
print(f"Аудиозапись: {audio_file}")

elif at['type'] == "audio_message":
# Получаем файл аудиосообщения
audio_file = at['audio_message']['file']
# Выводим информацию о файле аудиосообщения
print(f"Аудиосообщение: {audio_file}")

elif at['type'] == "video":
# Получаем файл видеофайла
video_file = at['video']['file']
# Выводим информацию о файле видеофайла
print(f"Видео: {video_file}")

elif at['type'] == "group_call_in_progress":
# Выводим информацию о групповом звонке
print("Групповой звонок в прогрессе")

elif at['type'] == "wall_reply":
# Получаем текст ответа на стену
reply_text = at['wall_reply']['text']
# Выводим информацию о тексте ответа на стену
print(f"Ответ на стену: {reply_text}")

elif at['type'] == "wall":
# Получаем текст записи в стену
wall_text = at['wall']['text']
# Выводим информацию о тексте записи в стену
print(f"Запись на стене: {wall_text}")

elif at['type'] == "poll":
# Получаем вопрос опроса
poll_question = at['poll']['question']
# Получаем ответы на опрос
poll_answers = at['poll']['answers']
# Выводим информацию о вопросе опроса и его ответах
print(f"Опрос: {poll_question}, ответы: {poll_answers}")

elif at['type'] == "link":
# Получаем URL ссылки
link_url = at['link']['url']
# Проверяем, является ли ссылка ссылкой на статью в EF STATA
if link_url.startswith("https://ef-stata.com"):
# Обрабатываем ссылку на статью в EF STATA
print(f"Ссылка на статью в EF STATA: {link_url}")

elif at['type'] == "doc":
# Получаем файл документа
doc_file = at['doc']['file']
# Выводим информацию о файле документа
print(f"Документ: {doc_file}")

Стартовый код

import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
token = ""
soob_id =
vk_session = vk_api.VkApi(token=token)
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, soob_id)
while True:
    try:
        for event in longpoll.listen():
            print(event)
            print("\n")
            if event.type == VkBotEventType.MESSAGE_NEW:
                #loading = threading.Thread(target=MESSAGE, args=(event,))
                #loading.start()
                event_message(event)

            if event.type == VkBotEventType.WALL_POST_NEW:
                post_id = event.object.id
                group_id = event.group_id
                vk.messages.send(peer_id=2000000001, message='Просто тест', random_id=0, attachment=f'wall-{event.group_id}_{event.object.id}')
                vk.messages.send(peer_id=2000000001, message="Просто тест", random_id=0, attachment=f"photo-225327458_457239024")

            if event.type == "message_reaction_event":
                vk.messages.send(peer_id=2000000001, message="сучка поставила реакцию", random_id=0,)
    except Exception as e:
        print(f"Возникла ошибка: {e}
        
        ")
  continue
  message = event.obj.message
    chat_id = event.chat_id

    pprint.pprint(message)
    print("\n")

    peer_id       = message["peer_id"]
    from_id       = message["from_id"]
    sms_id        = message["conversation_message_id"]
    date          = message["date"]
    att           = message["attachments"]
    fwd_messages  = message["fwd_messages"]
    text          = message["text"]
    action        = message.get("action")
    reply_message = message.get("reply_message")
    payload       = message.get("payload")
                
    if text.lower() == "пинг":
        vk.messages.send(peer_id=peer_id, random_id=0, message="типа пинг")

Упоминание

if "[id" in from_id and "|" in from_id and "]" in from_id:
from_id = from_id.split("|")[0][3:]
if from_id.isdigit():
return int(from_id)
return False
elif "[club" in from_id and "|" in from_id and "]" in from_id:
from_id = from_id.split("|")[0][5:]
if from_id.isdigit():
return -int(from_id)
return False
elif "https://vk.com/id" in from_id:
pass
elif "https://vk.com/club" in from_id:
pass
elif "vk.com/id" in from_id:
pass
elif "vk.com/club" in from_id:
pass
elif "https://vk.com/" in from_id:
screen_name = from_id[:15]
o = True
elif "vk.com/" in from_id:
screen_name = from_id[:7]
o = True

if user_id.isdigit():
return int(user_id)

if user_id.startswith("[id") and user_id.split("|")[0][3:].isdigit():
return int(user_id)

if user_id.startswith("[club") and user_id.split("|")[0][5:].isdigit():
return int(user_id)

if user_id.startswith("https://vk.com/club") and user_id[19:].isdigit():
return int(user_id[19:])

if user_id.startswith("https://vk.com/id") and user_id[17:].isdigit():
return int(user_id[17:])

if user_id.startswith("vk.com/club") and user_id[11:].isdigit():
return int(user_id[11:])

if user_id.startswith("vk.com/id") and user_id[9:].isdigit():
return int(user_id[9:])

nick = "DBBINOPEN"
return f"[id{nick[1]}|{nick[0]}]" if nick[2] == True else nick[0]

vk.utils.resolveScreenName(screen_name=screen_name)

Факты про ВКонтакте

  1. Простая беседа лимит 1000 участников
  2. Чат сообщества лимит 7000 участников
  3. Команда это текст из слов. По сути текст.
  4. В командах могут быть параметры в виде слов символов ссылок и упоминаний. Текст приходят в сообщениях которые хранят и медиа плюс время дату.
  5. Команды бывают простые без параметром и с параметрами.
  6. Бот распознает символы, слова и строки.
  7. Команды могут иметь доступ команд а могут и не иметь.
  8. Вк очень кривое приложение и поэтому люди часто используют иные которые не имеют полного функционала да и на сайтах разнобой полный и вот проблемы. Приложения ВК могут быть не у всех как и кнопки меню сообществ. Так-же не у всех могут быть кнопки или работать они в полной мере. Поэтому самая примитивная основа бота это текст и картинки.
  9. По своей сути админы техподдержки могут быть не нужны они создают проблемы сами многое не знают и очень много агресируют портя имидж бота примеры бы я привел но смысла нет.
  10. Боты есть общего характера и узкие. Они все хорошие в боте много чего можно запихнуть но вот мое мнение. Облики команд множество синонимов или сложные комбинации команд и прочее. Меня сбили с мыслей. В общем чем проще и доступнее бот тем лучше и скажу так со смайликами тоже аккуратнее их не все могут видеть корректно и это портит вид сообщения создавая колхозный вид.
  11. Многие команды однотипны но потребляют колоссальное количество места а вот тут уже думать надо стоит ли.
  12. Перенасыщение бота командами не всегда лучше его сложнее настроить иногда лучше разделить бота на ботов.
  13. Способы оплаты помните что не всегда можно это автоматизировать или сделать оплату для иной валюты например тенге.
  14. Помните в ВК о том что пользовательский контент несет опасность поэтому надо ограничить свободу людям или создать громадную команду контроля над всем что не возможно.
  15. Помните что профиль привязан к человеку и к чату то есть бота могут заблокировать и айди бесед потеряют актуальность нужно придумать как обходить это но в основном люди придумал группы представители для расширения возможностей или же закрепляют чат за профилем создателя или применяю бота по типу ID фиксации.
  16. Бот может менять хостинг поэтому нужно думать над аккуратным переносом данных. И нельзя допускать мусорного засорения данными место не резиновое.

Виды диалогов

  1. Лс - личный диалог с человеком
  2. Простой чат - там создатель человек
  3. Чат сообщества - там создатель сообщество

Надо думать над нагрузкой на бота, полным управлением ботов из лс разрабочика, о месте на сервере, типы команд.

Действие в чате

  1. Смена авы
  2. Смена название
  3. Выход человека
  4. Вход человека
  5. Кик человека
  6. Добавление человек
  7. Сообщение

Боты ВК

1. Викторина https://vk.com/club170763395
2. Фреш https://vk.com/club203003740
3. Сот https://vk.com/club205747591
4. Ада https://vk.com/club178947124
5. Мафия https://vk.com/club182711509
6. Су https://vk.com/club219622329
7. Цитатник https://vk.com/club212178194
8. Пхолли https://vk.com/club182977390
9. Ирис https://vk.com/club174105461
10. Бандит https://vk.com/club166948584
11. Леся https://vk.com/club158861435
12. Оповещение https://vk.com/club131851952
13. Бибка https://vk.com/club203899337
14. Пума https://vk.com/club201538565
15. Покер https://vk.com/club151782797
16. Леонардо https://vk.com/club98301621
17. Крокодил https://vk.com/club186820032
18. Писька https://vk.com/club193557157
19. Жекабот https://vk.com/club159666458
20. Админ бот https://vk.com/club170175796
21. Бот нищий https://vk.com/club221392393
22. Амазинг бот https://vk.com/club174864680
23. Чатменеджер https://vk.com/club153955265
24. Неон https://vk.com/club193964540
25. Гранд https://vk.com/club188905432
26. Жои https://vk.com/club147845431
27. Аст https://vk.com/club197183074
28. Стар https://vk.com/club222139436
29. Элиан https://vk.com/club190262722
30. Лион https://vk.com/club137057280
31. Алукард https://vk.com/club185158200
32. Немо https://vk.com/club208086471
33. Джина https://vk.com/club204518165
34. Едал https://vk.com/club217049045
35. Слип https://vk.com/club183768928
36. Карман https://vk.com/club201657154
37. Конверс https://vk.com/club188869211
38. Чат менеджер https://vk.com/club171475621
39. Рп бот https://vk.com/club218437381
40. Фокс https://vk.com/club186882763
41. Чижик https://vk.com/club216030681
42. Россия https://vk.com/club208627372
43. Акула https://vk.com/club224298844
44. Тукан
45. Клубника
46. Рп бот https://vk.com/club197687978
47. Мишка
48. Гризли
49. Кай https://vk.com/club170393012
50. Савик
51. Strawberry
52. Neko Bot

Валюта

  • Перевод
  • Баланс
  • Списание
  • Начисление
  • История переводов
  • Бонус
  • Номер
  • Виды валют и их обмен
  • Пин код на время
  • Комиссия
  • Банк и накопление
  • ада - питон
  • кай - c#
  • ирис - котлин
  • пхолли и чм предположительно - js
  • карман - пхп
  • сотик - пхп
  • слип - js ts