Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 29.08.2022
Сообщений: 3
VK Bot

AttributeError: 'NoneType' object has no attribute 'vk_id'

29.08.2022, 15:44. Показов 1390. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка:

AttributeError: 'NoneType' object has no attribute 'vk_id'

Код:

Python
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
62
63
64
65
66
67
68
69
70
71
72
73
import vk_api
from vk_api.bot_longpoll import VkBotEventType, VkBotLongPoll
import utils
from config import *
 
 
class MyLongPool(VkBotLongPoll):
    def listen(self):
        while True:
            try:
                for event in self.check():
                    yield event
            except Exception as e:
                print(e)
 
 
class VkBot:
    def __init__(self):
        self.vk_session = vk_api.VkApi(token=token)
        self.longpoll = VkBotLongPoll(self.vk_session, 214680736)
 
    def run(self):
        for event in self.longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:
                msg = event.object.message
                user_id = msg['from_id']
                user = utils.get_user_by_id(user_id)
                text = msg['text']
                fwd = self.vk_session.method('messages.getByConversationMessageId', {
                    'conversation_message_ids': msg['conversation_message_id'],
                    'peer_id': msg['peer_id']
                })['items'][0]
 
                if 'reply_message' in fwd:
                    fwd = fwd['reply_message']
                else:
                    fwd = None
 
                if user.vk_id == admin_id:
                    if fwd:
                        if text == '!kick':
                            self.vk_session.method('messages.removeChatUser', {
                                'user_id': fwd['from_id'],
                                'chat_id': msg['peer_id'] - 2000000000
                            })
                        elif text == '!warn':
                            fwd_user = utils.get_user_by_id(['from_id'])
                            fwd_user.warns += 1
                            fwd_user.save()
 
                            user_name = self.vk_session.method('user.get', {'user_id': fwd_user.vk_id})[0]['first_name']
 
                            self.vk_session.method('messages.send', {
                                'chat_id': msg['peer_id'] - 2000000000,
                                'message': f'{user_name}, -!\n- {fwd_user.warns}/5',
                                'random_id': 0
                            })
 
                            if fwd_user.warns >= 5:
                                self.vk_session.method('messages.removeChatUser', {
                                    'user_id': fwd_user.vk_id,
                                    'chat_id': msg['peer_id'] - 2000000000
                                })
                    else:
                        self.vk_session.method('messages.send', {
                            'chat_id': msg['peer_id'] - 2000000000,
                            'message': f'-!',
                            'random_id': 0
                        })
 
 
if __name__ == '__main__':
    VkBot().run()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2022, 15:44
Ответы с готовыми решениями:

AttributeError: 'NoneType' object has no attribute 'id'
@bot.command(pass_context = True) async def createvoicechannels(ctx): role = discord.utils.get(ctx.channel.guild.roles, name =...

AttributeError: 'NoneType' object has no attribute 'index'
import random a = input() al = all = random.shuffle(al) b = al.index(a) m = all.index(a) print(al, jj) вот ошибка: File...

AttributeError: 'NoneType' object has no attribute 'peer_id'
import vk_api from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType from vk_api.utils import get_random_id def...

4
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
29.08.2022, 15:54
Xindryga, ну функция возвращает None и ты пытаешься взять у несуществующего(не найденного) пользователя "vk_id".
1
0 / 0 / 0
Регистрация: 29.08.2022
Сообщений: 3
29.08.2022, 15:59  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
from models import User
 
 
def get_user_by_id(user_id):
    try:
        return User().get(vk_id=user_id)
    except:
        User(
            vk_id=user_id,
            warns=0
        )
Добавлено через 3 минуты
Цитата Сообщение от Fudthhh Посмотреть сообщение
Xindryga, ну функция возвращает None и ты пытаешься взять у несуществующего(не найденного) пользователя "vk_id".
Я не очень силён в этом, сможешь помочь решить данную проблему?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
29.08.2022, 16:05
Xindryga, ну не надо быть особо умным чтоб понять, что в этой строке, нужно указать id пользователя а не список в котором храниться переменная "from_id":
Python
1
utils.get_user_by_id(['from_id'])
0
0 / 0 / 0
Регистрация: 29.08.2022
Сообщений: 3
29.08.2022, 16:34  [ТС]
Цитата Сообщение от Fudthhh Посмотреть сообщение
Xindryga, ну не надо быть особо умным чтоб понять, что в этой строке, нужно указать id пользователя а не список в котором храниться переменная "from_id":
Python
1
utils.get_user_by_id(['from_id'])
Даже с таким условием выдаётся ошибка

Python
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
62
63
import vk_api
from vk_api.bot_longpoll import VkBotEventType, VkBotLongPoll
import utils
from config import *
 
 
class MyLongPool(VkBotLongPoll):
    def listen(self):
        while True:
            try:
                for event in self.check():
                    yield event
            except Exception as e:
                print(e)
 
 
class VkBot:
    def __init__(self):
        self.vk_session = vk_api.VkApi(token=token)
        self.longpoll = VkBotLongPoll(self.vk_session, 214680736)
 
    def run(self):
        for event in self.longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:
                msg = event.object.message
                user_id = msg['from_id']
                user = utils.get_user_by_id(user_id)
                text = msg['text']
                fwd = self.vk_session.method('messages.getByConversationMessageId', {
                    'conversation_message_ids': msg['conversation_message_id'],
                    'peer_id': msg['peer_id']
                })['items'][0]
 
                if 'reply_message' in fwd:
                    fwd = fwd['reply_message']
                else:
                    fwd = None
 
                if user.vk_id == admin_id:
                    if fwd:
                        if text == '!kick':
                            self.vk_session.method('messages.removeChatUser', {
                                'user_id': fwd['from_id'],
                                'chat_id': msg['peer_id'] - 2000000000
                            })
                        elif text == '!warn':
                            #fwd_user = utils.get_user_by_id(fwd['from_id'])
                            #fwd_user.warns += 1
                            #fwd_user.save()
 
                            user_name = self.vk_session.method('users.get', {'user_id': fwd_user.vk_id})
                            print(user_name)
 
                            #self.vk_session.method('messages.send', {
                            #    'chat_id': msg['peer_id'] - 2000000000,
                            #    'message': f'{user_name}, -!\n- {fwd_user.warns}/5',
                            #    'random_id': 0
                            #})
 
 
 
if __name__ == '__main__':
    VkBot().run()

Traceback (most recent call last):
File "...\PycharmProjects\DA\main.py", line 63, in <module>
VkBot().run()
File "...\PycharmProjects\DA\main.py", line 39, in run
if user.vk_id == admin_id:
AttributeError: 'NoneType' object has no attribute 'vk_id'

Добавлено через 20 минут
Сменить решил на:
Python
1
fwd_user = utils.get_user_by_id(fwd['from_id'])
Но строчку кидаю в "#"
И он ругается на:
Python
1
if user.vk_id == admin_id:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.08.2022, 16:34
Помогаю со студенческими работами здесь

ERROR - TeleBot: "AttributeError occurred, args=("'NoneType' object has no attribute 'format'",)
Всем доброго дня! Пишу бота для телеграма, использую pyTelegramBotAPI. Написал простенький код: import telebot from telebot import...

AttributeError: 'OWM' object has no attribute 'weather_at_place'
добрый вечер, форумчане! начал писать код для бота с погодой (тк я новичок то делал все по видео, но мне выдает непонятную ошибку) ...

AttributeError: function object has no attribute 'polling'
import telebot class RobBot: bot = telebot.TeleBot(&quot;&quot;) def bot(bot): @bot.message_handler(commands=) def...

AttributeError: 'OWM' object has no attribute 'weather_at_place'
Здраствуйте помогите скомпилировать код! Я начинающий import telebot import pyowm owm =...

AttributeError: 'TeleBot' object has no attribute 'message_handler'
Команда: import telebot token = ('*Тут мой токен*') bot=telebot.TeleBot (token) @bot.message_handler(commands=) def...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru