Vk api ошибка 901

При отправке сообщения ботом пользователю, крашится с ошибкой: vk_api.exceptions.ApiError: [901] Can't send messages for users without permission, у бота имеются все нужные разрешение в настройках, так же у пользователя нет запрета на сообщения.

Код:

import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

vk_session = vk_api.VkApi(token="Тут ваш токен")

vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, "Айди сообщества (Не кастомное) пример: 94124211")

for event in longpoll.listen():
    if event.obj.text != "":
            if event.from_user:
                vk.messages.send(
                        user_id=event.obj.from_id,
                        random_id=get_random_id(),
                        message=event.obj.text)

задан 6 окт 2019 в 4:48

Slavatar's user avatar

5

Сам встретился с этой ошибкой, проблема оказалась в том, что мой бот пытался ответить на своё же сообщение, т.е. getFromId и getText на проблемном сообщении показал ответ сервера и минусовой id, вместо ожидаемого сообщения пользователя

Как сообщение бота попадает в пачку сообщений от вк пока разбираюсь.

ответ дан 11 мая 2020 в 4:55

Йегрес Нинез's user avatar

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

Пользователь может инициировать переписку:

  • отправив сообществу сообщение со страницы сообщества;
  • с помощью кнопки «Разрешить сообщения» на странице сообщества;
  • отправив сообществу сообщение с помощью виджета «Сообщения
    сообщества», размещённого на сайте сообщества;
  • разрешив отправлять ему личные сообщения с помощью виджета
    «Разрешить писать
    сообществу» или
    метода API VK в стороннем
    приложении
    (отправлять сообщение для этого не требуется).

Источник: Сообщения сообщества.

ответ дан 6 окт 2019 в 7:40

nomnoms12's user avatar

nomnoms12nomnoms12

18.4k5 золотых знаков24 серебряных знака48 бронзовых знаков

4

901 — Пользователь запретил отправку сообщений от имени сообщества. Это значит, либо пользователь запретил получать сообщения от группы, либо ещё не писал в неё. Если, пользователь ВКонтакте не написал сообщение в группу, значит он и не может получать их, так как это скорее всего как анти-спам.

ответ дан 13 янв 2021 в 12:23

CellTonus's user avatar

Скорее всего проблема в ID пользователя.
Можно использовать:
event.user_id

ответ дан 26 июл 2021 в 12:26

Masson's user avatar

MassonMasson

354 бронзовых знака

0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import vk_api
from vk_api.utils import get_random_id
from random import *
from vk_api import VkUpload
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
 
 
keyboard=VkKeyboard(one_time=True)
keyboard.add_button('Первая кнопка', color=VkKeyboardColor.PRIMARY)
keyboard.add_line()
keyboard.add_button('Вторая кнопка', color=VkKeyboardColor.POSITIVE)
keyboard.add_line()
keyboard.add_button('Третья кнопка', color=VkKeyboardColor.NEGATIVE)
 
def write_message(sender, message):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
token = ''
 
 
def sticker(sender):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'sticker_id': 71, "random_id": get_random_id()})
 
def clava(sender):
    authorize.method('messages.send', {'peer_id': sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'keyboard':keyboard.get_keyboard()})
 
 
 
def smile(sender, message):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
 
def picture(sender):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'attachment':','.join(attachments)})
 
authorize = vk_api.VkApi(token=token)
longpoll = VkBotLongPoll(authorize, group_id=202585633)
list_of_users=[]
image="C:/Users/Виктор/PycharmProjects/vkbot/1594262844_preview_В ПАЛАТУ ЖИВО.jpg"
upload=VkUpload(authorize)
for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat and event.message.get('text') != "":
        received_message = event.message.get('text')
        sender = event.chat_id
        attachments=[]
        upload_image = upload.photo_messages(photos=image)[0]
        attachments.append('photo{}_{}'.format(upload_image['owner_id'], upload_image['id']))
        if received_message == "Привет" or received_message== "привет":
            write_message(sender, "привет")
            sticker(sender)
            if list_of_users.count(sender) ==0:
                list_of_users.append(sender)
        elif received_message == "Пикча" or received_message== "пикча":
            picture(sender)
        elif received_message == "Клава" or received_message== "клава":
            clava(sender)
        elif received_message == "рассылка" or received_message== "Рассылка" and sender == 454303468:
            for user in list_of_users:
                write_message(user, 'Рассылка! Если тебе дошло это сообщение, значит рассылка работает!')
 
        else:
            write_message(sender, 'я вас не понимаю...������')

При отправке сообщения ботом пользователю, крашится с ошибкой: vk_api.exceptions.ApiError: [901] Can't send messages for users without permission, у бота имеются все нужные разрешение в настройках, так же у пользователя нет запрета на сообщения.

Код:

import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

vk_session = vk_api.VkApi(token="Тут ваш токен")

vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, "Айди сообщества (Не кастомное) пример: 94124211")

for event in longpoll.listen():
    if event.obj.text != "":
            if event.from_user:
                vk.messages.send(
                        user_id=event.obj.from_id,
                        random_id=get_random_id(),
                        message=event.obj.text)

задан 6 окт 2019 в 4:48

Slavatar's user avatar

5

Сам встретился с этой ошибкой, проблема оказалась в том, что мой бот пытался ответить на своё же сообщение, т.е. getFromId и getText на проблемном сообщении показал ответ сервера и минусовой id, вместо ожидаемого сообщения пользователя

Как сообщение бота попадает в пачку сообщений от вк пока разбираюсь.

ответ дан 11 мая 2020 в 4:55

Йегрес Нинез's user avatar

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

Пользователь может инициировать переписку:

  • отправив сообществу сообщение со страницы сообщества;
  • с помощью кнопки «Разрешить сообщения» на странице сообщества;
  • отправив сообществу сообщение с помощью виджета «Сообщения
    сообщества», размещённого на сайте сообщества;
  • разрешив отправлять ему личные сообщения с помощью виджета
    «Разрешить писать
    сообществу» или
    метода API VK в стороннем
    приложении
    (отправлять сообщение для этого не требуется).

Источник: Сообщения сообщества.

ответ дан 6 окт 2019 в 7:40

nomnoms12's user avatar

nomnoms12nomnoms12

18k5 золотых знаков21 серебряный знак45 бронзовых знаков

4

901 — Пользователь запретил отправку сообщений от имени сообщества. Это значит, либо пользователь запретил получать сообщения от группы, либо ещё не писал в неё. Если, пользователь ВКонтакте не написал сообщение в группу, значит он и не может получать их, так как это скорее всего как анти-спам.

ответ дан 13 янв 2021 в 12:23

CellTonus's user avatar

Скорее всего проблема в ID пользователя.
Можно использовать:
event.user_id

ответ дан 26 июл 2021 в 12:26

Masson's user avatar

MassonMasson

353 бронзовых знака

0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import vk_api
from vk_api.utils import get_random_id
from random import *
from vk_api import VkUpload
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
 
 
keyboard=VkKeyboard(one_time=True)
keyboard.add_button('Первая кнопка', color=VkKeyboardColor.PRIMARY)
keyboard.add_line()
keyboard.add_button('Вторая кнопка', color=VkKeyboardColor.POSITIVE)
keyboard.add_line()
keyboard.add_button('Третья кнопка', color=VkKeyboardColor.NEGATIVE)
 
def write_message(sender, message):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
token = ''
 
 
def sticker(sender):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'sticker_id': 71, "random_id": get_random_id()})
 
def clava(sender):
    authorize.method('messages.send', {'peer_id': sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'keyboard':keyboard.get_keyboard()})
 
 
 
def smile(sender, message):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
 
def picture(sender):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'attachment':','.join(attachments)})
 
authorize = vk_api.VkApi(token=token)
longpoll = VkBotLongPoll(authorize, group_id=202585633)
list_of_users=[]
image="C:/Users/Виктор/PycharmProjects/vkbot/1594262844_preview_В ПАЛАТУ ЖИВО.jpg"
upload=VkUpload(authorize)
for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat and event.message.get('text') != "":
        received_message = event.message.get('text')
        sender = event.chat_id
        attachments=[]
        upload_image = upload.photo_messages(photos=image)[0]
        attachments.append('photo{}_{}'.format(upload_image['owner_id'], upload_image['id']))
        if received_message == "Привет" or received_message== "привет":
            write_message(sender, "привет")
            sticker(sender)
            if list_of_users.count(sender) ==0:
                list_of_users.append(sender)
        elif received_message == "Пикча" or received_message== "пикча":
            picture(sender)
        elif received_message == "Клава" or received_message== "клава":
            clava(sender)
        elif received_message == "рассылка" or received_message== "Рассылка" and sender == 454303468:
            for user in list_of_users:
                write_message(user, 'Рассылка! Если тебе дошло это сообщение, значит рассылка работает!')
 
        else:
            write_message(sender, 'я вас не понимаю...������')

N

PROBLEMAJust like you https://es.stackoverflow.com/questions/495478/error-no-hay-respuesta-de-la-funci%c3%b3n-python#comment880526_495478 @Christian, the log value captured in your code:query = input(«Ingrese el numero de registro del libro que quiere buscar : n»)
It’s kind of str, however, the type of value of the field registro in your database documents is: numberas shown in the sample document of your question:{
‘_id’: ObjectId(’60adc9a6408965e33f808af3′),
‘título’: ‘Química Cuántica’,
‘Autor’: ‘Ira N. Levine’,
‘Edicion’: ‘6ta’,
‘Categoría’: ‘Química’,
‘registro’: 1.0, // <- number (float o real en este caso)
‘cantidad’: 3.0,
‘en prestamo’: 0.0,
‘disponibles’: 3.0,
‘veces prestado’: 0
}
Another highlight is the semantic inconsistency of the data types stored in your document.Apparently you’re storing a series of documents related to books, which are (or should be) indivisible, that is, unitary.Apart from being a waste of memory using a type float to indicate the amounts of total books, as well as available and on loan, it is illogical to use such data to handle whole amounts. And I’ve never entered a library where I can lend a fraction of a book. Therefore, these fields must be handled as integers: int. The same applies to the field registrowhich currently appears as float.SOLUTIONSuppose you correct in your document the type of data for the fields «registro», «cantidad», «en prestamo»(very bad choice of field name, just like «veces prestado») and «disponibles», so that all are of an entire type.I do the acotation of the bad choice of field name because they also represent a waste of memory in the long run. While you can have field names with spaces (actually any valid character for a field name in JSON is valid for one in MongoDB, basically any valid character for the type String Javascript), you are adding unnecessary space consumption at the Database.If you change the name of the fields in question for something like: prest and score, (or they are only suggestions of names) that although they are quite shorter and you can understand what they refer to, you would be saving 15 bytes of storage for each document in your collection.Perhaps in small collections this does not really have a big impact, but knowing this in advance will help you in larger projects, where 9 or 10 bytes per document can make the difference.With this in mind, you could capture the record value as follows:query = int(input(«Ingrese el numero de registro del libro que quiere buscar : n»))
And in this way the type of data of the variable query will be integer, and therefore consistent with the one you have stored in the database (as long as you have made the suggested change).We will now focus on the logic associated with obtaining the documents from your collection.You currently have within your function called busqueda the following:# …
d = lib.find({tip:query})
if d is None:
print(«Libro no existente en el sistema»)
else:
for libro in lib.find({tip:query}):
print(libro)
You make a call to the method. https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html#pymongo.collection.Collection.find and store the result in a variable called d. Then you ask if the variable is type None to know if there are search results or not.There are three problems with this logic:The first is that the method find() always returns https://pymongo.readthedocs.io/en/stable/api/pymongo/cursor.html#pymongo.cursor.Cursor or throws an exception if any of the arguments received is not valid. Therefore the variable d It’ll never be like this. None.The second problem is that you are consulting the collection without previously making a «fish» to know if it is really worth asking for information from it. He thinks it’s not worth the consultation if it’ll be empty. A cursor may be empty, that is, without data, so when you go through it you will have no results. In fact, it’s what’s going on in trying to get some kind of data. str of fields that have been stored float, there are simply no returns because there are no returns match in whole and floating.The third problem comes from the first: you are not capturing a possible exception in your query. Any call that throws an exception should handle it with a block. try except, this way you will have a little more control over the possible problem that may arise and you could prevent your application from doing crash.How do we «fish» and why?As we have already seen, the method find() returns a Cursor, but for this to happen, you have to consult your collection, suppose your collection has millions of documents. When making the query using a filter, all the documents corresponding to that filter will be returned, saving this data, which can be few, many or none, in a Cursor. To know if Cursor has elements that can be iterated I must use methods of an iterable, like next() For example. However, as I have said before, if a Cursor There’s nothing to do with it.To avoid iteration and storage of a vacuum iterable we can previously make a «fish» using the method https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html#pymongo.collection.Collection.count_documents that receives the same filter you will use in the method find().This method will give you an integer with the amount of documents that match the applied filter and you can make your decision from that result.For example:found = lib.count_documents({tip: query})
if not found:
print(«Sorry, no books»)
else:
# …
Now the code is quite clear as to what we are doing when making the query. First we are counting how many documents exist in the collection such that exceed the filter. If the result is 0 (zero), it means that there are no documents matching the search parameters and I do not need to store any Cursor.Now let’s see how to do the search using try exceptRemember that this search will be done only if the amount of documents matching the filter is higher than zero.import pprint
si tenemos más de 0 documentos
try:
books = lib.find({tip: query})
for book in books:
pprint.pprint(book)
except TypeError as err:
print(f»Unexpected {err=}, {type(err)=}»)
As you can see I used the module https://docs.python.org/3/library/pprint.html?highlight=pprint#module-pprint to show shape Nice the output of Cursor.This would be a basic structure to work with the MongoDB queries using the Python library.The full code could be seen as shown below:import pprint
def busqueda(query, tip):
print(f»se va a hacer la búsqueda: {query} {tip}») #Prueba de que recibe los argumentos
try:
found = lib.count_documents({tip: query})
if not found :
print(«Sorry, no books»)
else:
for libro in lib.find({tip: query}):
pprint.pprint(libro)
except TypeError as error:
print(f»Unexpected Error {error=}, {type(error)=}»)
except Exception as e:
print(f»Unknwon Exception {e=}, {type(e)=}»)
Final councilsIn the code of your function menu() You have the following:def menu():
opcion = «»
while opcion not in [1,2,3,4,5]:
opcion= int(input(» 1- titulo n 2- autor n 3- categoría n 4- id n -5 salir: n «))
# …
If the user enters a non-numeric value, the following line will release an exception:opcion= int(input(» 1- titulo n 2- autor n 3- categoría n 4- id n -5 salir: n «))
since you are making the value introduced by the user whole, and as we know the user can enter any value other than a numerical one.What I would do in your case is to change the list of valid options for them to be of type str, since at last and after the method input returns a str.Your function menu() I could look like this:def menu():
opcion = «»
while opcion not in [«1», «2», «3», «4», «5»]:
opcion= input(» 1- titulo n 2- autor n 3- categoría n 4- id n -5 salir: n «)
if opcion == «1»:
query = input(«Ingrese el título del libro que desea buscar: n «)
tip = «título»
elif opcion == «2»:
try:
query = int(input(«Ingrese el numero de registro del libro que quiere buscar : n»))
tip = «registro»
except TypeError:
print(«El valor introducido no es numérico, intente de nuevo»)
opcion = «»

return (query, tip)

I hope this helps you solve the problem.

  • #2

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

У тебя прав не хватает, чтобы написать первому от имени группы.
Для этого человек сам должен написать первое сообщение в ЛС паблика.

koncumone

  • #3

У тебя прав не хватает, чтобы написать первому от имени группы.
Для этого человек сам должен написать первое сообщение в ЛС паблика.

Написал первым, и разрешил сообщения, и всеравно нихуя, дал боту все права на переписку, дал ему админку, даже в очело дал, и нихуя

У тебя прав не хватает, чтобы написать первому от имени группы.
Для этого человек сам должен написать первое сообщение в ЛС паблика.

Кст, теперь ошибка internal server error

  • #4

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Написал первым, и разрешил сообщения, и всеравно нихуя, дал боту все права на переписку, дал ему админку, даже в очело дал, и нихуя

Кст, теперь ошибка internal server error

1) ты когда получал токен группы, указал, что токен дает доступ к сообщениям? Еще раз пересоздай.
2) internal error говорит лишь о твоем Кривом коде, который сервер не в состоянии обработать

#Northn

#Northn

Police Helper «Reborn» — уже пять лет!
  • #5

ошибка internal server error

Возможности бота включены?

koncumone

  • #6

Возможности бота включены?

Вроде да, все включено

  • #7

Если в беседу то peer_id должен начинаться с 2000000 затем айди беседы(сколько точно нулей не помню)

  • #8

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Если в беседу то peer_id должен начинаться с 2000000 затем айди беседы(сколько точно нулей не помню)

Есть chat_id, где уже все готово

  • #9

Есть chat_id, где уже все готово

вроде как на этой версии апи чат_ид не работает от имени сообщества

koncumone

  • #10

48407

кароче ебать, вот такая дичь, походу я все делал правильно, ток вк ебланы, и у них чет полетело
UPD
Нет это я долбоеб, я брал айдишник конфы со своей страницы, у меня выходило 160, щас зашел в групу, через групу в кф и там взял ее ид, ее ид был 6ыл
6 , ну и все отправляет теперь

48408

@Tyoma-MINOR

Я хочу отправить сообщение пользователю через VK API:
await vk.api.messages.send({message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}, peer_id: report.sender, chat_id: report.sender, random_id: utils.random(100000, 999999)});

Выдаётся следующая ошибка:
Can't send messages for users without permission

@Antonzlo

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

@Antonzlo

И зачем писать параметр chat_id при отправке пользователю?

@arslanp0

Я хочу отправить сообщение пользователю через VK API:
await vk.api.messages.send({message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}, peer_id: report.sender, chat_id: report.sender, random_id: utils.random(100000, 999999)});

Выдаётся следующая ошибка:
Can't send messages for users without permission

Пользователь не разрешил писать сообщения группе

@Tyoma-MINOR

Но я хочу отправить это сообщение себе от имени группы. А сообщения от группы у меня разрешены.

@Tyoma-MINOR

await vk.api.messages.send({user_id: report.sender, message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}});

@Antonzlo

await vk.api.messages.send({user_id: report.sender, message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}});

Вам нужно указать параметр random_id, но при желании вы можете поставить 0

@nitreojs

и все же, это не относится к библиотеке

Перейти к содержанию

VK API Error Code – Коды ошибок Вконтакте

Список всех возвращаемых кодов ошибок API в ВК

Код ошибки Описание
1 Произошла неизвестная ошибка.
Попробуйте повторить запрос позднее.
2 Приложение выключено. 
Нужно включить приложение в настройках https://vk.com/editapp?id={Ваш API_ID} или воспользоваться тестовым режимом (test_mode=1)
3 Передан неизвестный метод.
Нужно проверить указано ли название вызываемого метода: https://vk.com/dev/methods.
4 Неверная подпись. 
5 Авторизация пользователя не удалась.
Следует убедиться, что используется верная схема авторизации.
6 Слишком много запросов в секунду.
Нужно задать больший интервал между запросами или использовать метод execute. Узнать подробнее об ограничениях на частоту вызовов можно тут: https://vk.com/dev/api_requests.
7 Нет прав для выполнения этого действия.
Следует проверить, получены ли необходимые права доступа при авторизации. Сделать это можно с помощью метода account.getAppPermissions.
8 Неверный запрос.
Нужно проверить синтаксис запроса и список параметров, которые используются.
9 Слишком много однотипных действий.
Нужно уменьшить число однотипных обращений. Для оптимизации работы можно использовать execute или JSONP.
10 Произошла внутренняя ошибка сервера.
Попробуйте повторить запрос позже.
11 В тестовом режиме приложение должно быть выключено или пользователь должен быть залогинен.
Следует выключить приложение в настройках https://vk.com/editapp?id={Ваш API_ID}
14 Требуется ввод кода с картинки (Captcha).
Процесс обработки этой ошибки подробно описан на странице.
15 Доступ запрещён.
Следует убедиться, что используются верные идентификаторы, а также, что доступ к запрашиваемому контенту для текущего пользователя есть в полной версии сайта.
16 Требуется выполнение запросов по протоколу HTTPS, т.к. пользователь включил настройку, требующую работу через безопасное соединение.
Во избежание возникновения этой ошибки, в Standalone-приложении можно предварительно проверять состояние этой настройки у пользователя методом account.getInfo.
17 Требуется валидация пользователя.
Действие требует подтверждения — нужно перенаправить пользователя на служебную страницу для валидации.
18 Страница удалена или заблокирована.
Страница пользователя была удалена или заблокирована
20 Данное действие запрещено для не Standalone приложений.
Если ошибка появляется несмотря на то, что приложение имеет тип Standalone, следует убедиться, что при авторизации было использовано redirect_uri=https://oauth.vk.com/blank.html. Подробнее на странице: https://vk.com/dev/auth_mobile.
21 Данное действие разрешено только для Standalone и Open API приложений.
23 Метод был выключен.
Ознакомиться со всеми актуальными методами ВК API, доступными в настоящий момент можно тут: https://vk.com/dev/methods.
24 Требуется подтверждение со стороны пользователя.
27 Ключ доступа сообщества недействителен.
28 Ключ доступа приложения недействителен.
29 Достигнут количественный лимит на вызов метода.
Узнать подробнее об ограничениях на количество вызовов можно тут:
https://vk.com/dev/data_limits
30 Профиль является приватным.
Информация, которая запрашивается о профиле, недоступна с используемым ключом доступа
33 Еще не реализовано.
100 Один из необходимых параметров был не передан или неверен.
Следует проверить список требуемых параметров и их формат на странице с описанием метода.
101 Неверный API ID приложения.
Нужно найти приложение в списке администрируемых на странице, и указать в запросе правильный API_ID (идентификатор приложения).
113 Неверный идентификатор пользователя.
Следует убедиться, что используется правильный идентификатор. Получить ID по короткому имени можно методом utils.resolveScreenName.
150 Неверный timestamp (метка времени).
Актуальное значение можно получить методом utils.getServerTime.
200 Доступ к альбому запрещён.
Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта.
201 Доступ к аудио запрещён.
Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта.
203 Доступ к группе запрещён.
Нужно убедиться, что текущий пользователь является участником или руководителем группы (для закрытых и частных групп и встреч).
300 Альбом переполнен.
Перед продолжением работы нужно удалить лишние объекты из альбома или использовать другой альбом.
500 Действие запрещено. Вы должны включить переводы голосов в настройках приложения.
Следует проверить настройки приложения: https://vk.com/editapp?id={Ваш API_ID}&section=payments
600 Нет прав на выполнение данных операций с рекламным кабинетом.
603 Произошла ошибка при работе с рекламным кабинетом.
3300 Требуется рекапча.
3301 Требуется подтверждение телефона.
3302 Требуется подтверждение пароля.
3303 Требуется проверка приложения Otp.
3304 Требуется подтверждение по электронной почте.
3305 Требуется утвердить голоса.

VK API Error Code

@Tyoma-MINOR

Я хочу отправить сообщение пользователю через VK API:
await vk.api.messages.send({message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):\n${context.$match[2]}, peer_id: report.sender, chat_id: report.sender, random_id: utils.random(100000, 999999)});

Выдаётся следующая ошибка:
Can't send messages for users without permission

@Antonzlo

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

@Antonzlo

И зачем писать параметр chat_id при отправке пользователю?

@arslanp0

Я хочу отправить сообщение пользователю через VK API:
await vk.api.messages.send({message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):\n${context.$match[2]}, peer_id: report.sender, chat_id: report.sender, random_id: utils.random(100000, 999999)});

Выдаётся следующая ошибка:
Can't send messages for users without permission

Пользователь не разрешил писать сообщения группе

@Tyoma-MINOR

Но я хочу отправить это сообщение себе от имени группы. А сообщения от группы у меня разрешены.

@Tyoma-MINOR

await vk.api.messages.send({user_id: report.sender, message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):\n${context.$match[2]}});

@Antonzlo

await vk.api.messages.send({user_id: report.sender, message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):\n${context.$match[2]}});

Вам нужно указать параметр random_id, но при желании вы можете поставить 0

@nitreojs

и все же, это не относится к библиотеке

При отправке сообщения ботом пользователю, крашится с ошибкой: vk_api.exceptions.ApiError: [901] Can't send messages for users without permission, у бота имеются все нужные разрешение в настройках, так же у пользователя нет запрета на сообщения.

Код:

import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

vk_session = vk_api.VkApi(token="Тут ваш токен")

vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, "Айди сообщества (Не кастомное) пример: 94124211")

for event in longpoll.listen():
    if event.obj.text != "":
            if event.from_user:
                vk.messages.send(
                        user_id=event.obj.from_id,
                        random_id=get_random_id(),
                        message=event.obj.text)

задан 6 окт 2019 в 4:48

Slavatar's user avatar

5

Сам встретился с этой ошибкой, проблема оказалась в том, что мой бот пытался ответить на своё же сообщение, т.е. getFromId и getText на проблемном сообщении показал ответ сервера и минусовой id, вместо ожидаемого сообщения пользователя

Как сообщение бота попадает в пачку сообщений от вк пока разбираюсь.

ответ дан 11 мая 2020 в 4:55

Йегрес Нинез's user avatar

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

Пользователь может инициировать переписку:

  • отправив сообществу сообщение со страницы сообщества;
  • с помощью кнопки «Разрешить сообщения» на странице сообщества;
  • отправив сообществу сообщение с помощью виджета «Сообщения
    сообщества», размещённого на сайте сообщества;
  • разрешив отправлять ему личные сообщения с помощью виджета
    «Разрешить писать
    сообществу» или
    метода API VK в стороннем
    приложении
    (отправлять сообщение для этого не требуется).

Источник: Сообщения сообщества.

ответ дан 6 окт 2019 в 7:40

nomnoms12's user avatar

nomnoms12nomnoms12

18.3k5 золотых знаков23 серебряных знака47 бронзовых знаков

4

901 — Пользователь запретил отправку сообщений от имени сообщества. Это значит, либо пользователь запретил получать сообщения от группы, либо ещё не писал в неё. Если, пользователь ВКонтакте не написал сообщение в группу, значит он и не может получать их, так как это скорее всего как анти-спам.

ответ дан 13 янв 2021 в 12:23

CellTonus's user avatar

Скорее всего проблема в ID пользователя.
Можно использовать:
event.user_id

ответ дан 26 июл 2021 в 12:26

Masson's user avatar

MassonMasson

354 бронзовых знака

0

import vk_api
from vk_api import longpoll

def main():
    vk_session = vk_api.VkApi(token="здесь он есть")

    longpoll_sever = vk_api.longpoll.VkLongPoll(vk_session)

    for event in longpoll_sever.listen():
        if event.type == vk_api.longpoll.VkEventType.MESSAGE_NEW:

            try:
                vk_session.get_api().messages.send(peer_id=123456, message=eval(event.text))

            except vk_api.ApiError as err:
                print("Error", err, end="n"*2)

            except ValueError:
                vk_session.get_api().messages.send(peer_id=123456, message="Напишите правильный пример")

main()

Код работает нормально, но не может отправлять сообщения. Мне выдается error[901], причем я не дурачок и посмотрел решение проблемы в интернете. Черный список пуст, сообщения разрешены, в настройках сообщества все идеально. Вы моя последняя надежда

Home>2021-07-25 21:26

python : Error sending a message vk_api

When sending a message to the Bot to the user, strokes with an error:

vk_api.exceptions.apierror: [901] CAN't Send Messages for Users Wort Permission

, the bot has all the necessary permission in the settings, the user has no ban on messages.

Code:

Import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import vkbotlongpoll, vkboteventtype
vk_session= vk_api.vkapi (token= "here your token")
vk= vk_session.get_api ()
Longpoll= vkbotlongpoll (VK_Session, "Aidi community (not custom) Example: 94124211")
For event in longpoll.listen ():
    If event.obj.text!= "":
            If event.from_user:
                vk.messages.send (
                        user_id= event.obj.from_id,
                        random_id= get_random_id (),
                        Message= event.obj.text)

Related questions

  • python : sqlite3 db returns none
  • How to translate into a normal format -a date from numbers. Python
  • Loading bar in Python 3.x
  • Program for finding synonyms of Russian words python
  • javascript : How to pass value of js variables to python(eel)?
  • python : How to create a window in the game for example (dota2)
  • python : How to speed up polynomial hash calculation
  • python : Sending a file using telegramAPI
  • python : Input() constraint (int, float)
  • python : Bot on aiogram does not see the answer to someone else’s message
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import vk_api
from vk_api.utils import get_random_id
from random import *
from vk_api import VkUpload
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
 
 
keyboard=VkKeyboard(one_time=True)
keyboard.add_button('Первая кнопка', color=VkKeyboardColor.PRIMARY)
keyboard.add_line()
keyboard.add_button('Вторая кнопка', color=VkKeyboardColor.POSITIVE)
keyboard.add_line()
keyboard.add_button('Третья кнопка', color=VkKeyboardColor.NEGATIVE)
 
def write_message(sender, message):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
token = ''
 
 
def sticker(sender):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'sticker_id': 71, "random_id": get_random_id()})
 
def clava(sender):
    authorize.method('messages.send', {'peer_id': sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'keyboard':keyboard.get_keyboard()})
 
 
 
def smile(sender, message):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
 
def picture(sender):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'attachment':','.join(attachments)})
 
authorize = vk_api.VkApi(token=token)
longpoll = VkBotLongPoll(authorize, group_id=202585633)
list_of_users=[]
image="C:/Users/Виктор/PycharmProjects/vkbot/1594262844_preview_В ПАЛАТУ ЖИВО.jpg"
upload=VkUpload(authorize)
for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat and event.message.get('text') != "":
        received_message = event.message.get('text')
        sender = event.chat_id
        attachments=[]
        upload_image = upload.photo_messages(photos=image)[0]
        attachments.append('photo{}_{}'.format(upload_image['owner_id'], upload_image['id']))
        if received_message == "Привет" or received_message== "привет":
            write_message(sender, "привет")
            sticker(sender)
            if list_of_users.count(sender) ==0:
                list_of_users.append(sender)
        elif received_message == "Пикча" or received_message== "пикча":
            picture(sender)
        elif received_message == "Клава" or received_message== "клава":
            clava(sender)
        elif received_message == "рассылка" or received_message== "Рассылка" and sender == 454303468:
            for user in list_of_users:
                write_message(user, 'Рассылка! Если тебе дошло это сообщение, значит рассылка работает!')
 
        else:
            write_message(sender, 'я вас не понимаю...������')

При отправке сообщения ботом пользователю, крашится с ошибкой: vk_api.exceptions.ApiError: [901] Can't send messages for users without permission, у бота имеются все нужные разрешение в настройках, так же у пользователя нет запрета на сообщения.

Код:

import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

vk_session = vk_api.VkApi(token="Тут ваш токен")

vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, "Айди сообщества (Не кастомное) пример: 94124211")

for event in longpoll.listen():
    if event.obj.text != "":
            if event.from_user:
                vk.messages.send(
                        user_id=event.obj.from_id,
                        random_id=get_random_id(),
                        message=event.obj.text)

задан 6 окт 2019 в 4:48

Slavatar's user avatar

5

Сам встретился с этой ошибкой, проблема оказалась в том, что мой бот пытался ответить на своё же сообщение, т.е. getFromId и getText на проблемном сообщении показал ответ сервера и минусовой id, вместо ожидаемого сообщения пользователя

Как сообщение бота попадает в пачку сообщений от вк пока разбираюсь.

ответ дан 11 мая 2020 в 4:55

Йегрес Нинез's user avatar

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

Пользователь может инициировать переписку:

  • отправив сообществу сообщение со страницы сообщества;
  • с помощью кнопки «Разрешить сообщения» на странице сообщества;
  • отправив сообществу сообщение с помощью виджета «Сообщения
    сообщества», размещённого на сайте сообщества;
  • разрешив отправлять ему личные сообщения с помощью виджета
    «Разрешить писать
    сообществу» или
    метода API VK в стороннем
    приложении
    (отправлять сообщение для этого не требуется).

Источник: Сообщения сообщества.

ответ дан 6 окт 2019 в 7:40

nomnoms12's user avatar

nomnoms12nomnoms12

18k5 золотых знаков21 серебряный знак45 бронзовых знаков

4

901 — Пользователь запретил отправку сообщений от имени сообщества. Это значит, либо пользователь запретил получать сообщения от группы, либо ещё не писал в неё. Если, пользователь ВКонтакте не написал сообщение в группу, значит он и не может получать их, так как это скорее всего как анти-спам.

ответ дан 13 янв 2021 в 12:23

CellTonus's user avatar

Скорее всего проблема в ID пользователя.
Можно использовать:
event.user_id

ответ дан 26 июл 2021 в 12:26

Masson's user avatar

MassonMasson

353 бронзовых знака

0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import vk_api
from vk_api.utils import get_random_id
from random import *
from vk_api import VkUpload
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
 
 
keyboard=VkKeyboard(one_time=True)
keyboard.add_button('Первая кнопка', color=VkKeyboardColor.PRIMARY)
keyboard.add_line()
keyboard.add_button('Вторая кнопка', color=VkKeyboardColor.POSITIVE)
keyboard.add_line()
keyboard.add_button('Третья кнопка', color=VkKeyboardColor.NEGATIVE)
 
def write_message(sender, message):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
token = ''
 
 
def sticker(sender):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'sticker_id': 71, "random_id": get_random_id()})
 
def clava(sender):
    authorize.method('messages.send', {'peer_id': sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'keyboard':keyboard.get_keyboard()})
 
 
 
def smile(sender, message):
    authorize.method('messages.send',{'peer_id': sender, 'chat_id': sender, 'message': message, "random_id": get_random_id()})
 
def picture(sender):
    authorize.method('messages.send', {'peer_id':sender, 'chat_id': sender, 'message': 'держи', "random_id": get_random_id(), 'attachment':','.join(attachments)})
 
authorize = vk_api.VkApi(token=token)
longpoll = VkBotLongPoll(authorize, group_id=202585633)
list_of_users=[]
image="C:/Users/Виктор/PycharmProjects/vkbot/1594262844_preview_В ПАЛАТУ ЖИВО.jpg"
upload=VkUpload(authorize)
for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat and event.message.get('text') != "":
        received_message = event.message.get('text')
        sender = event.chat_id
        attachments=[]
        upload_image = upload.photo_messages(photos=image)[0]
        attachments.append('photo{}_{}'.format(upload_image['owner_id'], upload_image['id']))
        if received_message == "Привет" or received_message== "привет":
            write_message(sender, "привет")
            sticker(sender)
            if list_of_users.count(sender) ==0:
                list_of_users.append(sender)
        elif received_message == "Пикча" or received_message== "пикча":
            picture(sender)
        elif received_message == "Клава" or received_message== "клава":
            clava(sender)
        elif received_message == "рассылка" or received_message== "Рассылка" and sender == 454303468:
            for user in list_of_users:
                write_message(user, 'Рассылка! Если тебе дошло это сообщение, значит рассылка работает!')
 
        else:
            write_message(sender, 'я вас не понимаю...������')

N

PROBLEMAJust like you https://es.stackoverflow.com/questions/495478/error-no-hay-respuesta-de-la-funci%c3%b3n-python#comment880526_495478 @Christian, the log value captured in your code:query = input(«Ingrese el numero de registro del libro que quiere buscar : n»)
It’s kind of str, however, the type of value of the field registro in your database documents is: numberas shown in the sample document of your question:{
‘_id’: ObjectId(’60adc9a6408965e33f808af3′),
‘título’: ‘Química Cuántica’,
‘Autor’: ‘Ira N. Levine’,
‘Edicion’: ‘6ta’,
‘Categoría’: ‘Química’,
‘registro’: 1.0, // <- number (float o real en este caso)
‘cantidad’: 3.0,
‘en prestamo’: 0.0,
‘disponibles’: 3.0,
‘veces prestado’: 0
}
Another highlight is the semantic inconsistency of the data types stored in your document.Apparently you’re storing a series of documents related to books, which are (or should be) indivisible, that is, unitary.Apart from being a waste of memory using a type float to indicate the amounts of total books, as well as available and on loan, it is illogical to use such data to handle whole amounts. And I’ve never entered a library where I can lend a fraction of a book. Therefore, these fields must be handled as integers: int. The same applies to the field registrowhich currently appears as float.SOLUTIONSuppose you correct in your document the type of data for the fields «registro», «cantidad», «en prestamo»(very bad choice of field name, just like «veces prestado») and «disponibles», so that all are of an entire type.I do the acotation of the bad choice of field name because they also represent a waste of memory in the long run. While you can have field names with spaces (actually any valid character for a field name in JSON is valid for one in MongoDB, basically any valid character for the type String Javascript), you are adding unnecessary space consumption at the Database.If you change the name of the fields in question for something like: prest and score, (or they are only suggestions of names) that although they are quite shorter and you can understand what they refer to, you would be saving 15 bytes of storage for each document in your collection.Perhaps in small collections this does not really have a big impact, but knowing this in advance will help you in larger projects, where 9 or 10 bytes per document can make the difference.With this in mind, you could capture the record value as follows:query = int(input(«Ingrese el numero de registro del libro que quiere buscar : n»))
And in this way the type of data of the variable query will be integer, and therefore consistent with the one you have stored in the database (as long as you have made the suggested change).We will now focus on the logic associated with obtaining the documents from your collection.You currently have within your function called busqueda the following:# …
d = lib.find({tip:query})
if d is None:
print(«Libro no existente en el sistema»)
else:
for libro in lib.find({tip:query}):
print(libro)
You make a call to the method. https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html#pymongo.collection.Collection.find and store the result in a variable called d. Then you ask if the variable is type None to know if there are search results or not.There are three problems with this logic:The first is that the method find() always returns https://pymongo.readthedocs.io/en/stable/api/pymongo/cursor.html#pymongo.cursor.Cursor or throws an exception if any of the arguments received is not valid. Therefore the variable d It’ll never be like this. None.The second problem is that you are consulting the collection without previously making a «fish» to know if it is really worth asking for information from it. He thinks it’s not worth the consultation if it’ll be empty. A cursor may be empty, that is, without data, so when you go through it you will have no results. In fact, it’s what’s going on in trying to get some kind of data. str of fields that have been stored float, there are simply no returns because there are no returns match in whole and floating.The third problem comes from the first: you are not capturing a possible exception in your query. Any call that throws an exception should handle it with a block. try except, this way you will have a little more control over the possible problem that may arise and you could prevent your application from doing crash.How do we «fish» and why?As we have already seen, the method find() returns a Cursor, but for this to happen, you have to consult your collection, suppose your collection has millions of documents. When making the query using a filter, all the documents corresponding to that filter will be returned, saving this data, which can be few, many or none, in a Cursor. To know if Cursor has elements that can be iterated I must use methods of an iterable, like next() For example. However, as I have said before, if a Cursor There’s nothing to do with it.To avoid iteration and storage of a vacuum iterable we can previously make a «fish» using the method https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html#pymongo.collection.Collection.count_documents that receives the same filter you will use in the method find().This method will give you an integer with the amount of documents that match the applied filter and you can make your decision from that result.For example:found = lib.count_documents({tip: query})
if not found:
print(«Sorry, no books»)
else:
# …
Now the code is quite clear as to what we are doing when making the query. First we are counting how many documents exist in the collection such that exceed the filter. If the result is 0 (zero), it means that there are no documents matching the search parameters and I do not need to store any Cursor.Now let’s see how to do the search using try exceptRemember that this search will be done only if the amount of documents matching the filter is higher than zero.import pprint
si tenemos más de 0 documentos
try:
books = lib.find({tip: query})
for book in books:
pprint.pprint(book)
except TypeError as err:
print(f»Unexpected {err=}, {type(err)=}»)
As you can see I used the module https://docs.python.org/3/library/pprint.html?highlight=pprint#module-pprint to show shape Nice the output of Cursor.This would be a basic structure to work with the MongoDB queries using the Python library.The full code could be seen as shown below:import pprint
def busqueda(query, tip):
print(f»se va a hacer la búsqueda: {query} {tip}») #Prueba de que recibe los argumentos
try:
found = lib.count_documents({tip: query})
if not found :
print(«Sorry, no books»)
else:
for libro in lib.find({tip: query}):
pprint.pprint(libro)
except TypeError as error:
print(f»Unexpected Error {error=}, {type(error)=}»)
except Exception as e:
print(f»Unknwon Exception {e=}, {type(e)=}»)
Final councilsIn the code of your function menu() You have the following:def menu():
opcion = «»
while opcion not in [1,2,3,4,5]:
opcion= int(input(» 1- titulo n 2- autor n 3- categoría n 4- id n -5 salir: n «))
# …
If the user enters a non-numeric value, the following line will release an exception:opcion= int(input(» 1- titulo n 2- autor n 3- categoría n 4- id n -5 salir: n «))
since you are making the value introduced by the user whole, and as we know the user can enter any value other than a numerical one.What I would do in your case is to change the list of valid options for them to be of type str, since at last and after the method input returns a str.Your function menu() I could look like this:def menu():
opcion = «»
while opcion not in [«1», «2», «3», «4», «5»]:
opcion= input(» 1- titulo n 2- autor n 3- categoría n 4- id n -5 salir: n «)
if opcion == «1»:
query = input(«Ingrese el título del libro que desea buscar: n «)
tip = «título»
elif opcion == «2»:
try:
query = int(input(«Ingrese el numero de registro del libro que quiere buscar : n»))
tip = «registro»
except TypeError:
print(«El valor introducido no es numérico, intente de nuevo»)
opcion = «»

return (query, tip)

I hope this helps you solve the problem.

  • #2

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

У тебя прав не хватает, чтобы написать первому от имени группы.
Для этого человек сам должен написать первое сообщение в ЛС паблика.

koncumone

  • #3

У тебя прав не хватает, чтобы написать первому от имени группы.
Для этого человек сам должен написать первое сообщение в ЛС паблика.

Написал первым, и разрешил сообщения, и всеравно нихуя, дал боту все права на переписку, дал ему админку, даже в очело дал, и нихуя

У тебя прав не хватает, чтобы написать первому от имени группы.
Для этого человек сам должен написать первое сообщение в ЛС паблика.

Кст, теперь ошибка internal server error

  • #4

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Написал первым, и разрешил сообщения, и всеравно нихуя, дал боту все права на переписку, дал ему админку, даже в очело дал, и нихуя

Кст, теперь ошибка internal server error

1) ты когда получал токен группы, указал, что токен дает доступ к сообщениям? Еще раз пересоздай.
2) internal error говорит лишь о твоем Кривом коде, который сервер не в состоянии обработать

#Northn

#Northn

Police Helper «Reborn» — уже пять лет!
  • #5

ошибка internal server error

Возможности бота включены?

koncumone

  • #6

Возможности бота включены?

Вроде да, все включено

  • #7

Если в беседу то peer_id должен начинаться с 2000000 затем айди беседы(сколько точно нулей не помню)

  • #8

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Если в беседу то peer_id должен начинаться с 2000000 затем айди беседы(сколько точно нулей не помню)

Есть chat_id, где уже все готово

  • #9

Есть chat_id, где уже все готово

вроде как на этой версии апи чат_ид не работает от имени сообщества

koncumone

  • #10

48407

кароче ебать, вот такая дичь, походу я все делал правильно, ток вк ебланы, и у них чет полетело
UPD
Нет это я долбоеб, я брал айдишник конфы со своей страницы, у меня выходило 160, щас зашел в групу, через групу в кф и там взял ее ид, ее ид был 6ыл
6 , ну и все отправляет теперь

48408

@Tyoma-MINOR

Я хочу отправить сообщение пользователю через VK API:
await vk.api.messages.send({message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}, peer_id: report.sender, chat_id: report.sender, random_id: utils.random(100000, 999999)});

Выдаётся следующая ошибка:
Can't send messages for users without permission

@Antonzlo

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

@Antonzlo

И зачем писать параметр chat_id при отправке пользователю?

@arslanp0

Я хочу отправить сообщение пользователю через VK API:
await vk.api.messages.send({message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}, peer_id: report.sender, chat_id: report.sender, random_id: utils.random(100000, 999999)});

Выдаётся следующая ошибка:
Can't send messages for users without permission

Пользователь не разрешил писать сообщения группе

@Tyoma-MINOR

Но я хочу отправить это сообщение себе от имени группы. А сообщения от группы у меня разрешены.

@Tyoma-MINOR

await vk.api.messages.send({user_id: report.sender, message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}});

@Antonzlo

await vk.api.messages.send({user_id: report.sender, message: 🆘 ${nickname(sender)}, [id${user.vk_id}|${administrator.post} #${administrator.id}] ответил на Ваш репорт №${report.id} (${report.answer}):n${context.$match[2]}});

Вам нужно указать параметр random_id, но при желании вы можете поставить 0

@nitreojs

и все же, это не относится к библиотеке

Перейти к содержанию

VK API Error Code – Коды ошибок Вконтакте

Код ошибки Описание
1 Произошла неизвестная ошибка.
Попробуйте повторить запрос позднее.
2 Приложение выключено. 
Нужно включить приложение в настройках https://vk.com/editapp?id={Ваш API_ID} или воспользоваться тестовым режимом (test_mode=1)
3 Передан неизвестный метод.
Нужно проверить указано ли название вызываемого метода: https://vk.com/dev/methods.
4 Неверная подпись. 
5 Авторизация пользователя не удалась.
Следует убедиться, что используется верная схема авторизации.
6 Слишком много запросов в секунду.
Нужно задать больший интервал между запросами или использовать метод execute. Узнать подробнее об ограничениях на частоту вызовов можно тут: https://vk.com/dev/api_requests.
7 Нет прав для выполнения этого действия.
Следует проверить, получены ли необходимые права доступа при авторизации. Сделать это можно с помощью метода account.getAppPermissions.
8 Неверный запрос.
Нужно проверить синтаксис запроса и список параметров, которые используются.
9 Слишком много однотипных действий.
Нужно уменьшить число однотипных обращений. Для оптимизации работы можно использовать execute или JSONP.
10 Произошла внутренняя ошибка сервера.
Попробуйте повторить запрос позже.
11 В тестовом режиме приложение должно быть выключено или пользователь должен быть залогинен.
Следует выключить приложение в настройках https://vk.com/editapp?id={Ваш API_ID}
14 Требуется ввод кода с картинки (Captcha).
Процесс обработки этой ошибки подробно описан на странице.
15 Доступ запрещён.
Следует убедиться, что используются верные идентификаторы, а также, что доступ к запрашиваемому контенту для текущего пользователя есть в полной версии сайта.
16 Требуется выполнение запросов по протоколу HTTPS, т.к. пользователь включил настройку, требующую работу через безопасное соединение.
Во избежание возникновения этой ошибки, в Standalone-приложении можно предварительно проверять состояние этой настройки у пользователя методом account.getInfo.
17 Требуется валидация пользователя.
Действие требует подтверждения — нужно перенаправить пользователя на служебную страницу для валидации.
18 Страница удалена или заблокирована.
Страница пользователя была удалена или заблокирована
20 Данное действие запрещено для не Standalone приложений.
Если ошибка появляется несмотря на то, что приложение имеет тип Standalone, следует убедиться, что при авторизации было использовано redirect_uri=https://oauth.vk.com/blank.html. Подробнее на странице: https://vk.com/dev/auth_mobile.
21 Данное действие разрешено только для Standalone и Open API приложений.
23 Метод был выключен.
Ознакомиться со всеми актуальными методами ВК API, доступными в настоящий момент можно тут: https://vk.com/dev/methods.
24 Требуется подтверждение со стороны пользователя.
27 Ключ доступа сообщества недействителен.
28 Ключ доступа приложения недействителен.
29 Достигнут количественный лимит на вызов метода.
Узнать подробнее об ограничениях на количество вызовов можно тут:
https://vk.com/dev/data_limits
30 Профиль является приватным.
Информация, которая запрашивается о профиле, недоступна с используемым ключом доступа
33 Еще не реализовано.
100 Один из необходимых параметров был не передан или неверен.
Следует проверить список требуемых параметров и их формат на странице с описанием метода.
101 Неверный API ID приложения.
Нужно найти приложение в списке администрируемых на странице, и указать в запросе правильный API_ID (идентификатор приложения).
113 Неверный идентификатор пользователя.
Следует убедиться, что используется правильный идентификатор. Получить ID по короткому имени можно методом utils.resolveScreenName.
150 Неверный timestamp (метка времени).
Актуальное значение можно получить методом utils.getServerTime.
200 Доступ к альбому запрещён.
Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта.
201 Доступ к аудио запрещён.
Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта.
203 Доступ к группе запрещён.
Нужно убедиться, что текущий пользователь является участником или руководителем группы (для закрытых и частных групп и встреч).
300 Альбом переполнен.
Перед продолжением работы нужно удалить лишние объекты из альбома или использовать другой альбом.
500 Действие запрещено. Вы должны включить переводы голосов в настройках приложения.
Следует проверить настройки приложения: https://vk.com/editapp?id={Ваш API_ID}&section=payments
600 Нет прав на выполнение данных операций с рекламным кабинетом.
603 Произошла ошибка при работе с рекламным кабинетом.
3300 Требуется рекапча.
3301 Требуется подтверждение телефона.
3302 Требуется подтверждение пароля.
3303 Требуется проверка приложения Otp.
3304 Требуется подтверждение по электронной почте.
3305 Требуется утвердить голоса.

Список всех возвращаемых кодов ошибок API в ВК

VK API Error Code

Понравилась статья? Поделить с друзьями:
  • Vive cosmos ошибка 200
  • Viva pinata ошибка
  • Vitotronic 300 k ошибка d5 viessmann
  • Vitotronic 333 коды ошибок
  • Vitotronic 100 gc1b коды ошибок