1. Python / Говнокод #27244

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    import datetime, random, time, os, vk_api
    import sqlite3 as sl
    from vk_api.exceptions import Captcha
    from vk_api.longpoll import VkEventType, VkLongPoll
    from functions import *
    from settings import *
    vk_session = vk_api.VkApi(token=token, api_version=5.126)
    longpoll = VkLongPoll(vk_session)
    vk = vk_session.get_api()
    now = datetime.datetime.now()
    
    for event in longpoll.listen():
        try:
            def send_msg(msg='', chat=False, prefix=True, attach=''):
                if chat:
                    vk.messages.send(chat_id=event.chat_id,message=msg,attachment=attach)
                else:
                    vk.messages.send(user_id=event.user_id,message=msg,attachment=attach)
        except Captcha:
            time.sleep(1)
            send_msg('Ошибка. Слишком частые запросы.')
        except Exception as e:
            time.sleep(1)
            send_msg(f'Неизвестная ошибка при отправке сообщения.\n{e}')
        try:
            if event.type == VkEventType.MESSAGE_NEW and event.to_me:
                user_get = vk.users.get(user_ids=event.user_id)
                first_name = user_get[0]['first_name']
                last_name = user_get[0]['last_name']
                if event.from_chat and event.chat_id and (event.message == '!meme' or event.message == '!мем'):
                    meme_create()
                    upload = vk_api.VkUpload(vk_session)
                    try:
                        a = upload.photo_messages(photos=os.path.dirname(__file__) + '/random_meme.jpg', peer_id=event.user_id)
                        send_msg(attach=f'photo{a[0]["owner_id"]}_{a[0]["id"]}',chat=True, prefix=False)
                    except:
                        send_msg("Ошибка. Попробуйте снова.")
                elif event.from_chat and event.chat_id and (event.message == '!info' or event.message == '!инфо'):
                    response = requests.get(f'https://vk.com/foaf.php?id={event.user_id}')
                    soup = BeautifulSoup(response.text, 'lxml')
                    created = soup.find('ya:created').get('dc:date')
                    created1 = datetime.datetime.strptime(created, '%Y-%m-%dT%H:%M:%S%z').replace(tzinfo=None)
                    diff = datetime.datetime.now()-created1
                    modified = soup.find('ya:modified').get('dc:date')
                    modified1 = datetime.datetime.strptime(modified, '%Y-%m-%dT%H:%M:%S%z').replace(tzinfo=None)
                    send_msg(f'''https://vk.com/id{event.user_id}\nИмя пользователя: {first_name} {last_name}\nАккаунт существует {diff.days} дней.\nДата регистрации: {created1.month} {months[created1.month-1]} {created1.year} в {created1.time()}\nПоследнее обновление информации: {modified1.month} {months[modified1.month-1]} {modified1.year} в {modified1.time()}''', chat=True)
                elif event.from_user and event.user_id and (event.message == '!info' or event.message == '!инфо'):
                    response = requests.get(f'https://vk.com/foaf.php?id={event.user_id}')
                    soup = BeautifulSoup(response.text, 'lxml')
                    created = soup.find('ya:created').get('dc:date')
                    created1 = datetime.datetime.strptime(created, '%Y-%m-%dT%H:%M:%S%z').replace(tzinfo=None)
                    diff = datetime.datetime.now()-created1
                    modified = soup.find('ya:modified').get('dc:date')
                    modified1 = datetime.datetime.strptime(modified, '%Y-%m-%dT%H:%M:%S%z').replace(tzinfo=None)
                    send_msg(f'''https://vk.com/id{event.user_id}\nИмя пользователя: {first_name} {last_name}\nАккаунт существует {diff.days} дней.\nДата регистрации: {created1.month} {months[created1.month-1]} {created1.year} в {created1.time()}\nПоследнее обновление информации: {modified1.month} {months[modified1.month-1]} {modified1.year} в {modified1.time()}''')
                elif event.from_user and event.user_id and event.message == '!coin':
                    coin = 'Орёл' if random.randint(0, 1) == 1 else 'Решка'
                    send_msg(f'{coin}')
                elif event.from_user and event.user_id and (event.message == '!anek' or event.message == '!анек'):
                    send_msg(f'{get_anek()}', prefix=False)
                elif event.from_user and event.user_id:
                    con = sl.connect(os.path.dirname(__file__) + '/users.db')
                    count = 0
                    with con:
                                con.execute("""
                                    CREATE TABLE IF NOT EXISTS USER (
                                        user_id INTEGER NOT NULL PRIMARY KEY,
                                        name TEXT,
                                        permission_lvl INTEGER
                                    );
                                """)
                    with con:
                        data = con.execute("SELECT * FROM USER")
                        for row in data:
                            if event.user_id in row:
                                count += 1
                        if count == 0:
                            send_msg(f'''Привет, это сообщение отправлено автоматически.\nПока я добавляю информацию о тебе в базу данных, ты можешь ознакомиться с командами написав !help\nКоманд не так много, но в будущем их станет больше ;)''')
                            sql = 'INSERT INTO USER (user_id, name, permission_lvl) values(?, ?, ?)'
                            data = [(event.user_id, f'{first_name} {last_name}', 1)]
                            with con:
                                con.executemany(sql, data)
                if event.attachments:
                    print(
                        f"{now}\nuser_id: {event.user_id} | {first_name} {last_name}\nmessage: {event.message}\nattach: {event.attachments}\n")
                else:
                    print(
                        f"{now}\nuser_id: {event.user_id} | {first_name} {last_name}\nmessage: {event.text}\n")
        except Captcha:
            time.sleep(1)
            send_msg('Ошибка. Слишком частые запросы.')
        except Exception as e:
            time.sleep(1)
            send_msg(f'Упс. Произошла неизвестная ошибка.\n{e}')

    Каким образом можно улучшить этот ссаный говнокод?

    Запостил: TupoyChel, 09 Февраля 2021

    Комментарии (97) RSS

    • Е.т как много написано!
      Ответить
    • Если переписать на ПХП, то это станет обычным кодом на ПХП.
      Ответить
    • > Команд не так много, но в будущем их станет больше
      Ну очевидно же, как улучшить. Добавлять новые команды до тех пор, пока не придёт озарение.
      Ответить
      • Это понятно, но как можно получше оптимизировать сам код?)
        Ответить
        • Код, задействующий сетевые вызовы, обычно в оптимизации не нуждается
          Ответить
          • А код, задействующий time.sleep(1) -- тем более.
            Ответить
            • какая асинхронщина )))

              а зачем это кстати? это же не пропустит кадр ивент лупа? Там вообще есть ивент луп?
              Ответить
              • Есть. В строке 12.

                А задержка нужна чтобы ВК не забанил за спам, видимо.
                Ответить
                • А, time.sleep принимает секунды
                  Ответить
                • да, для этого))0)
                  Я просто немного новичок, стараюсь как могу
                  Ответить
                  • А не боишься, что автор этой либы спиздит у тебя логин-пароль-токен?
                    Ответить
                    • А это не официальная либа?
                      Ответить
                      • Насколько я знаю, там нужно самому запросы отправлять к ним по каким-то адресам, получать ответы, вот это всё... А все такие библиотеки – это сторонние обёртки.

                        Для йажи что-то официальное есть:

                        https://vk.com/dev/Java_SDK

                        А для питона, кажется, нету )))
                        Ответить
                        • интересно, зачем нужно официальное жабасдк? пилить кастомные клиенты под ведрюшу?
                          Ответить
                          • Для андроида есть отдельное СДК:

                            «SDK упрощает использование API ВКонтакте в Android-приложениях. Пользователи смогут пройти авторизацию без ввода логина и пароля. После этого вы сможете сразу начать использовать методы API»

                            https://vk.com/dev/android_sdk

                            А ещё есть для ПХП и йажаскрипта.
                            Ответить
                          • Странно.Официальных клиентов для вк — хуй да нихуя. А JavaSDK идёт в документации первой, и документация там олимпиадного уровня:
                            //Create service actor
                            Integer appId = 4123123;
                            String accessToken = "sadf0asfsadfas";
                            ServiceActor actor = new ServiceActor(appId, accessToken);

                            Я думал, может для говна под названием mail agent использовалась javaSDK, хуй ведь знает, на чем он написан? Стал гуглить, и увидел это:

                            https://agent.mail.ru/linux

                            > Агент для Linux
                            >Удобство работы и ничего лишнего.
                            > Linux 16.04 и новее

                            Это ж охуенно. Linux 16.04!
                            Ответить
                            • > Linux 16.04

                              Чуваки из будущего, наверное. У меня пока пятый.
                              Ответить
                              • Я из-за злоебучего легаси-драйвера для видюхи на 419 сижу, хотя надо будет проапгрейдить железо, для музла нужно rt ядро палюбэ.

                                Вы, кстати, вообще, осознаёте, какой пирдолинг стоит при желании делать саунд-продакшен под линуксом? И какой при этом флоу, когда всё отконфижено нормально?
                                Ответить
                                • А лор почитаешь, так там половина юзеров звукачи-трюкачи или как минимум гитаросексуалы
                                  Ответить
                                • > какой пирдолинг стоит при желании делать саунд-продакшен под линуксом

                                  Примерно. Мне подключения пианинки к lmms хватило: по-умолчанию такой охуенный пердёж, дисторшен и лаги, что можно просто ебашить и не париться с эффектами.
                                  Ответить
                                  • Вообще поидеи на линуксе с подключением музыкальной апаратуры должно быть намного лучше и удобнее, чем через ебучую прослойку виндовского говна который делает задержку в 127г8371е2 миллисекунд еще и зожимает и блядь преобразует неведомой хуйней что на входе в комп получается выблевок. Не зря там существует говноебучий ASIO который в рот ебал прослойки и идет на прямиг.
                                    Ответить
                                    • > ебучую прослойку

                                      Не забывай про пшшшпшшшаудио от поттеринга, которое сейчас во всех дистрибах по-умолчанию.
                                      Ответить
                                      • В линуксе в этом случея можно её вероятно уебать. А в винде "АХАХАХАХАХАХАХХАХА"
                                        Я конечно не ыксперд, но если верить заявлениям пердоликам что можно все поменять в леньке. А в винде как всегда сосни.
                                        Ответить
                                        • > В линуксе в этом случея можно её вероятно уебать.

                                          Угу. Приходишь ты в магазин за гитарой, а тебе продают лопату. Ахуенный инструмент, бери не пожалеешь, надо всего лишь струны прикрутить и звукосниматель. Ну и древко доработать напильником рубанком.

                                          Вся суть линукса.
                                          Ответить
                                          • https://youtu.be/IyQOw-_H4yE
                                            Ответить
                                          • Но часто так и происходит: и звукосниматели ставят кастомные, и струны меняют, потому что родные это старое говно.

                                            Вон теннисные ракетки, начиная со среднего ценового уровня, вообще продаются без струн, потому что типа ты всё равно будешь нормальные ставить
                                            Ответить
                                            • Насчет пукоснимателей хуйня, хуйня потому что обычно гитару покупают уже чтобы не пердолится а замена звукоснимателя это если тебя чем то уже не устраивает или купил дешевую парашу, а струны да. Струны заведомо хуевыми ставят, чтобы просто гитара имела товарный вид или не ебу для чего.
                                              А покупать гитару ради куска дерева - ебанутсво чтоли. Нахуя и зачем тебе это зубочистка и зачем с этим говном тебе пердолится, когда можно было заведомо купить нормальную гитару с нормальными звукоснимателями.
                                              Ответить
                                              • Звукосниматели могут быть нормальными, просто захотелось другого звука, при этом во всём остальном инструмент может подходить

                                                Но я не гитарист, только рядом стоял
                                                Ответить
                                                • "другого звука" звучит странно. Ну да ладно.
                                                  Я тоже не джитарист но джитару имею и даже могу 1 струну дергать, вот это блядь скилл!
                                                  https://drive.google.com/file/d/1q2NDF6yP20TySlbisET1hTciUNPB61F0/view

                                                  И это на стоковых cort x6 звукоснимателях за 5 гривен. Ну да ладно, у каждого свой долбоебизм и свои заморочки на тему "прекрасного" и "идеального".
                                                  Ответить
                                              • Ну и кусок дерева куску дерева рознь
                                                Ответить
                                          • Ну винда тогда:
                                            Приходишь ты в магазин за гитарой, а тебе продают УШМ. Ахуенный инструмент, бери не пожалеешь, надо всего лишь купить димер и защитный кожух, и рубанок на скочь прилепить. А Самое главное УНИВЕРСАЛЬНЫЙ!
                                            Ответить
                                            • Музыка без пердолинга только в макоси, наверное.
                                              Ответить
                                              • Наверное. Но он не нужон.
                                                Ответить
                                              • У меня есть знакомый звукач, который собрал несколько тачек и поставил на них хакинтош лол
                                                Ответить
                                              • Не, аппаратная внешняя звуковуха, или портостудия, и дальше уже что хочешь юзай. Главное звук из компа вытащить во внешнее устройство, и заставить работать.

                                                Ну я вот знаю чувака, у которого в макоси музыка "типа" без пердолинга, но фактически там просто весь пердолинг перемещён в ёблю с пираченными софтами (не покупать же их в самом деле, тем более что для нормального продакшена их нужно штук шесть).
                                                Ответить
                                          • Приходишь ты в магазин за гитарой, а там тебе дают пластмассовую гитару из магазина Детский Мир, у которой есть usb-выход и она работает с одной конкретной китайской версией игры Guitar Hero. Ты говоришь: а можно доработать напильником, чтобы хотя бы в комбик втыкалась? Нет.

                                            Вся суть винды.
                                            Ответить
                                            • Пиздёж какой-то.
                                              Ответить
                                            • Приходишь в магазин за гитарой, а тебе по кускам продают за 666 бачей за "изящное" говно и подставку тоже отдельно пожалуйста. Вся суть макось.
                                              Ответить
                                              • Приходишь в магазин за гитарой, а купил ремешок за 9999
                                                Ответить
                                              • однако в макоси прямо из коробки есть garage band

                                                в остальном сложно не согласиться
                                                Ответить
                                              • Приходишь на мусорку за гитарой, берёшь бесплатно. Вся суть прыщей.
                                                Ответить
                                                • Да не работают все эти метафоры с точки зрения хомячка. Это то же самое, что сравнивать, в социализме и либерализме лучше писать стихи. Ось - это философия, тут ни причём ни качество, ни работоспособность, они скорее вторичны и вытекают из философии оси. Вот например что сказали бы на винде, если бы был оконный менеджер, у которого нет настроек, нет даже конфига, есть только программный интерфейс апи. Да эту программу назвали бы сырой и вообще говном, у нее был бы школосайт на народ.ру и два юзера, создатель и его одноклассник. А в линуксе из-за самой философии это может быть киллер фичей. Общие критерии к этим системам как к однородным продуктам типа этот лучше этот хуже, построить нельзя. Собор и базар, ёба
                                                  Ответить
                                                  • > это может быть киллер фичей.

                                                    Это и на винде может быть киллер-фичей. Просто надо позиционировать такой софт под правильную ЦА. Любителей попердолиться и попревозмогать невозможное там хватает. Вспомни, как народ ебашит всякие моды к игрушкам, у которых даже API публичного то нету, не то что исходников.

                                                    А философия она всё-таки не у осей, а у людей. И чем популярнее ось, тем больше людей с различной философией тусуется вокруг них.
                                                    Ответить
                                                    • Насчёт модов согласен, а насчёт философии -- получается популярность первичные философии? А может наоборот?
                                                      Ответить
                                                      • что такое философия?

                                                        какая философия у винды? у лялиха? у фрибисди? у полуоси?
                                                        Ответить
                                                        • > какая философия у винды? у лялиха? у фрибисди? у полуоси?

                                                          Да нету её. У нишевых дистрибов или какого-нибудь эппла может и есть какое-то консистентное видение, а у остальных с годами всё размылось. Философия -- это круто, конечно, но юзеров и разрабов то хочется привлечь.
                                                          Ответить
                                                          • > У какого-нибудь эппла может и есть какое-то консистентное видение
                                                            - я десять лет пользуюсь макосью, имхо самыми большими изменениями были отказ от x32, что принесло обычному юзеру только геморрой, и плоский дизайн, спижженный у мс
                                                            Ответить
                                                            • > отказ от x32

                                                              Кстати, а нахуя? Неужели мешок 32-битных либ и переходник с 32-битного API на 64-битное так дорого обходится в поддержке? Все остальные вроде смирились с этим костылём.

                                                              Ну и если уж хочется зафорсить миграцию, почему бы не запретить 32-битность только для нового софта?
                                                              Ответить
                                                              • "потому что могу"

                                                                решили унифицировать. но у эппла вроде современных железок на тридцати двух битах и не осталось давным давно
                                                                Ответить
                                                                • > железок

                                                                  Да 32-битных железок и на ПК то не осталось. Я про 32-битный софт.

                                                                  Я представляю, какая боль в жопе там была у разрабов, которые до последнего сидели на 32 и забивали на 64, а потом эппл им сказал: "идите нахуй из моего стора пока не портанёте".
                                                                  Ответить
                                                                • Кстати, а они же вроде на ARM собирались перейти? Там тоже весь софт дропнут?
                                                                  Ответить
                                                                  • да нет. у эппла уже долгая история с армом на устройствах и есть богатый опыт поддержки одновременно девайсов и симуляторов (fat binaries, XCFrameworks), технической проблемы нет
                                                                    Ответить
                                                              • > зафорсить миграцию
                                                                - ну тут надо отдать должное, за пару версий до Каталины при запуске 32-битного софта появлялось предупреждающее окошко. так что софт, который не был заброшен, должны были успеть обновить.

                                                                правда, официальный wine до сих пор на новых макосях не работает, какая жалость
                                                                Ответить
                                                        • https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0% B8%D0%BF)
                                                          Ответить
                                                      • Общая популярность складывается из пригодности оси для групп с различной философией ;)

                                                        Как-то так. Кто-то юзает потому что тыщу серваков поднять выходит дешевле чем на венде, кто-то юзает потому что подпилить легче чем проприетарщину, кто-то юзает потому что идеология RMS'а нравится. У всех свои тараканы.

                                                        Даже у RMS и Линуса философия разная, вспомни их спор о GPLv3.

                                                        З.Ы. Ну и с развитием ОС она становится интересна каким-то другим группам и они начинают тащить одеяло на себя.
                                                        Ответить
                                    • Без апаратных звуковух нормальных всё плохо. Прослоек в каком-то смысле даже больше, есть же ещё jack по окторому тоже идёт звук, раз на уровне инстанса выбирается например частота дискретизации. А без джека тебе нахуй не нужен стек на линуксе.
                                      Ответить
                                      • Нормальные аппаратных звуковух - не существует. Только внешние или дискретные которые в pci идут
                                        Какой еблан будет себе мамаку покупать Раде хорошей интегрированной ЦАП/АЦП?
                                        P.s. у меня аппаратное почему то ассоциируется со встроенным
                                        Ответить
                              • > Linux 16.04

                                16.04 - похоже на версию убунты.

                                Ubuntu 16.04 LTS «Xenial Xerus»
                                Ответить
                                • Ru.MaiLinux 16.04 "Adverse Agent"
                                  Ответить
                                  • Киллер-фича дистрибутива: отправка писем.
                                    Ответить
                                • Бинго.

                                  Самое смешное, что Ubuntu is not Linux
                                  Ответить
                                • а я достаточно хорош, чо обозвали дистр в честь меня
                                  Ответить
                                  • Всего лишь релиз
                                    Ответить
                                    • да точно, ошибся, но похуй. Как говорится очередные название прыщей - лишь ненужная мотня.
                                      Ответить
                                  • Дистрибутив в честь Нельсона Манделы, но он негр, возможно тоже связано с тобой.
                                    Ответить
                                    • Хелус Длинус всегда был Лимлянином. Это хороший друг Лимского госудаля. А его жену завут Неделжания Ягодиция.
                                      Ответить
                    • Вроде куда то на сторону помимо самого вк ничего не идет, да и прав у самого токена только сообщения
                      Ответить
    • а как так удалось хитро позвать BeautifulSoup, при этом его не импортируя?
      Ответить
      • Наверное, он в functions импортирован. Это вот так «текут абстракции»?
        Ответить
        • Ты файка госта?
          Ответить
          • Нет, я новенький. Просто мне так понравились вореции, питушня и кобенации, что я решил зарегистрироваться и что-нибудь тоже покукарекать, такое иногда случается

            Кстати, смотри какой смайлик-петузок:

            &(:4)<
            Ответить
            • интересно, можно ли щас зарегать на гк аккаунт с этим смайлом в виде ника
              Ответить
              • Нужно попробовать, будет довольно забавно, лишь бы только ГК не упал.
                Ответить
                • не знаю насчет гк, а вот перл у меня починился /green
                  Ответить
            • Смайлик хороший, а у новенького ус отклеился.
              Ответить
          • А мне иногда кажется, что Лолечка — файка Кегдана.
            Ответить
            • Чем Гэндальф серый от Гэндальфа белого? Только мытой бородой?
              Ответить
        • Тогда он должен быть ещё и прописан в __all__ в functions, чтобы неявно протечь через звёздочку. Случайно такое не сделаешь.
          Ответить
          • Случайно это очень хорошо делается: в питоне, если __all__ отсутствует, то работает стандартная схема импортирования, то есть подгружается вообще всё (что не начинается с нижнего подчёркивания).
            Ответить
        • Да, именно так :)
          Ответить
    • > 'INSERT INTO USER (user_id, name, permission_lvl) values(?, ?, ?)'
      Очень показательно, что даже полный нуб, используя язык программирования, отличный от «PHP», смог сделать параметризованный SQL-запрос и не обосраться с «инъекцией».
      Ответить
      • потому что в пи аш пи сикуэль инъекции это часть культуры, а в питоне, руби, джаве, перле, Go, и си шарп нет
        Ответить

    Добавить комментарий