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

    +1

    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
    from vk_bot.vk_config import GROUP_ID, TOKEN
    import vk_api
    from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
    import random
    from vk_bot.db_session import *
    from vk_bot.__all_models import BugReport, Comment
    import datetime
    from vk_bot.vacancies import get_vacancies, ServerError
    
    
    def main():
        global_init("feedback/feedback.sqlite")
        vk_session = vk_api.VkApi(
            token=TOKEN)
        vk = vk_session.get_api()
    
        longpoll = VkBotLongPoll(vk_session, GROUP_ID)
        bot_state = {}
    
        def send_msg(msg):
            vk.messages.send(user_id=event.obj.message['from_id'],
                             message=msg,
                             random_id=random.randint(0, 2 ** 64))
    
        for event in longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:
                if event.obj.message['from_id'] in bot_state and bot_state[event.obj.message['from_id']]:
                    state = bot_state[event.obj.message['from_id']]
                    if state == 1:
                        send_msg('Спасибо, ваше мнение для нас очень важно.')
                        Comment().new(event.obj.message['from_id'], datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                                      event.obj.message['text'])
                        bot_state[event.obj.message['from_id']] = 0
                    elif state == 2:
                        BugReport().new(event.obj.message['from_id'], datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                                        event.obj.message['text'])
                        send_msg('Спасибо за ваш отзыв, мы постараемся исправить проблему в ближайшем будущем.')
                        bot_state[event.obj.message['from_id']] = 0
                    elif state == 4:
                        parameters = [r.strip() for r in event.obj.message['text'].split(',')]
                        try:
                            vacancies = get_vacancies(parameters[0], parameters[1])
                        except ServerError:
                            send_msg('Не удалось получить ответ от сервера, попробуйте позже')
                            bot_state[event.obj.message['from_id']] = 0
                        except Exception:
                            send_msg('Данные введены некорректно, попробуйте заново.')
                            send_msg('Формат: <должность>, <мин. зарплата>')
                        else:
                            if len(vacancies) == 0:
                                send_msg('По данным критериям ничего не найдено')
                            else:
                                vacancy_list = [f"{i}) {v['title']}, {v['salary']}" for i, v in enumerate(vacancies)]
                                send_msg('\n'.join(vacancy_list))
    
                    if bot_state[event.obj.message['from_id']] == 0:
                        send_msg('1 - написать отзыв или предложение\n 2 - сообщить о неправильной работе сайта\n 3 - документация к api\n 4 - посмотреть список доступных вакансий\n иначе напишите сообщение и модератор вскоре на него ответит')
    
                elif event.obj.message['from_id'] not in bot_state:
                    send_msg('1 - написать отзыв или предложение\n 2 - сообщить о неправильной работе сайта\n 3 - документация к api\n 4 - посмотреть список доступных вакансий\n иначе напишите сообщение и модератор вскоре на него ответит')
                    bot_state[event.obj.message['from_id']] = 0
                else:
                    key = event.obj.message['text'][0]
                    if key == '1':
                        send_msg('Пожалуйста, поделитесь вашим мнением по поводу сайта.')
                        bot_state[event.obj.message['from_id']] = 1
                    elif key == '2':
                        send_msg('Пожалуйста, максимально подробно опишите вашу проблему.')
                        bot_state[event.obj.message['from_id']] = 2
                    elif key == '3':
                        send_msg('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
                    elif key == '4':
                        send_msg('Введите название должности и минимальную желаемую зарплату по образцу:<должность>, <мин. зарплата>')
                        bot_state[event.obj.message['from_id']] = 4
                    else:
                        send_msg('Модератор вам скоро ответит, пожалуйста подождите.')
    
    
    if __name__ == '__main__':
        main()

    Код бота поддержки.
    Один из товарищей по проекту ничего в нем не делал,
    а потом чтобы его не выгоняли попросил дать ему хотя бы бота.
    Вот результат.
    Модели и вспомогательные файлы оставлять думаю не имеет смысла, все и так очевидно

    Запостил: AlexandrovRoman, 13 Мая 2020

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

    • Ну хоть SQL инъекцию в get_vacancies() он допустил?
      Ответить
      • Не, get_vacancies это получение данные по api сайта, а там нет такого говна
        Ответить
    • > документация к api
      > ссылкой на ютуб

      Остановите землю, я сойду. Мало того, что туториалы везде как видео публикуют, так теперь ещё и документацию к api...

      З.Ы. У меня теперь непреодолимое желание исходники на ютуб заливать. Чтоб все заебались.
      Ответить
      • > документация к api
        Всё нормально, XcQ в конце.
        Ответить
        • Кстати, можно же пулл-реквесты слать как запись со стрима, на котором ты правишь исходник.
          Ответить
      • Публичные ключи от криптушни тоже можно попробовать залить на «Ютуб»...
        Ответить
        • Снимая их трясущимися руками с мятой распечатки, угу.
          Ответить
          • продиктовать через дешманский микрофон, запинаясь, ключ. Некоторые места невнятно и неоднозначно
            Ответить
            • В середине чихнуть, а потом пропустить одну из цифр, а другую прочитать дважды.
              Ответить
        • Продиктовать распределение байт и предложить написать самосоятельную функцию сортировки
          Ответить
      • Большинство современных программистов не умеет читать. То-есть они знают буквы конечно, но прочитать большой текст (ну там более двух-трех предложений) они уже не могут.

        Приходится использовать видео
        Ответить
        • > современных программистов

          Чувствую себя каким-то питекантропом, вспоминая старые добрые статьи с наскальной псевдографикой...
          Ответить
          • man'ы
            Ответить
          •  ┌────┬───┬────┬───┐
            ┌┴┐  ┌┴┐ ┌┴┐  ┌┴┐  │
            │ │  │ │ │ │  │ │  │
            └┬┘  └┬┘ └┬┘  └┬┘  │
             │    │   │    │ ──┴──
             ├─┤├─┤   ├─┤├─┤   ┬
             │    └┐ ┌┘    │   │
              \│    ×    │/    │
               ├───┘ └───┤     │
              ↙│         │↘    │
             │             │   │
             └─────────────┴───┘
            Ответить
          • да, были времена

            Таблица 1
            ┌────────────────────────────────┬──────────┬───────────┬──────────┐
            │Наименование параметра          │требования│усредненные│требования│
            │                                │при серти-│характерис-│эксплуата-│
            │                                │фикации   │тики       │   ции    │
            ├────────────────────────────────┼──────────┼───────────┼──────────┤
            │Уровень передачи           (дБм)│ -13      │ -13...-10 │  -10     │
            │Пределы регулировки уровня (дБм)│ -13...0  │отсутствует│  -15...0 │
            │        передачи                │          │или -15..-4│          │
            │Чувствительность приемника (дБм)│ -43      │ -43...-35 │  -43     │
            │Затухание физической линии (дБм)│  15      │  15       │   20     │
            │Перекос АЧХ физическ. линии( дБ)│  12      │  15       │   20     │
            │Дрожание фазы (град)    не менее│          │           │          │
            │                    для V.22    │ +- 7.5   │+-7..+-22.5│   +-22.5 │
            │                    для V.22bis │ +- 7.5   │+-3...+-7.5│   +-7.5  │
            │Амплитуда скачков фазы с част.  │          │           │          │
            │менее 15 Гц   (град)    не менее│          │           │          │
            │                    для V.22    │не нормир.│+-7..+-22.5│   +-22.5 │
            │                    для V.22bis │не нормир.│+-3...+-7.5│   +-7.5  │
            │Сдвиг частоты     (Гц)  не менее│ +- 4     │+-4...+-10 │в отдельн.│
            Ответить
            • .                         Логический элемент - 4(2И-НЕ) 
              
              
                              ┌─────┐
                  1,4,9,12 ───┤  &  │                  Питание(+5В): вывод 14
                              │     │O── 3,6,8,11      Земля:        вывод 7
                 2,5,10,13 ───┤     │
                              └─────┘
              
                                    131ЛА3        155ЛА3         531ЛА3          555ЛА3
                                    (74H00)       (7400)         (74S00)         (74LS00)
              
               Iпот,       мА       40            22             36              4,4
               Iвх 0;1,    мА      -2; 0,05      -1,6; 0,04     -2; 0,05        -0,4; 0,02
               Iвых 0;1,   мА       20; -0,5      16; -0,4       20; -1          8; -0,4
               Uвых 0;1,   В        0,4; 2,4      0,4; 2,4       0,5; 2,7        0,5; 2,7
               T 1,0,      нс       10            15             5               15
               T 0,1,      нс       10            22             4,5             15
              Ответить
              • > 7, 14

                Хех, старая добрая разводка питания с противоположных углов... На современных частотах уже так не делают.
                Ответить
                • А как сейчас делают? Подводят питание в нескольких точках, чтобы закоротить внутреннюю индуктивность?
                  Ответить
                  • Да, причём земля и питание приходят парами на соседних пинах. Чтобы петля питания как можно меньшую площадь имела. Ну и чтобы байпасс кондёр припаять как можно ближе к чипу.
                    Ответить
                • Кстати, в ту эпоху были платы интересного дизайна: микросхемы были выстроены ровными рядками, а слева и справа от каждой микросхемы в плату была впаяна рейка из жести. Рейка слева соединялась с 14-м выводом каждой микросхемы и с источником +5 вольт, рейка справа соединялась с 7-м выводом каждой микросхемы и с «массой». А между рейками через равные промежутки были припаяны керамические конденсаторы (электролитических с низким импедансом (Low ESR) тогда ещё не было).
                  Ответить
                  • > рейка из жести

                    Сейчас питанию пара-тройка выделенных слоёв в плате посвящается. И керамические кондёры в упор к микросхеме тоже никто не отменял.

                    Рейку, видимо, ставили чтобы многослойную плату не делать.
                    Ответить
        • Подтверждаю. Сам по-диагонали часто читаю.

          Но по видео всё-таки тяжело искать документацию например к какому-то конкретному методу.
          Ответить
    • Вполне хватило бы одной строки send_msg('Модератор вам скоро ответит, пожалуйста подождите.')
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Твёрдый, мягкий знак и единицу не по назначению обычно используют вайнахи и какие-то дагестанцы.

        Какое отношение стихотворение имеет к коду?
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • Кошачий корень.
        Ответить
        • А кто такой «concat»?
          Ответить
          • консольный кот? http://thatlinuxbox.com/blog/images/articles/cat-meme-your-console_1.png
            Ответить
        • показать все, что скрытоvanished
          Ответить
          • А во «Фряхе» есть man da:
            https://www.opennet.ru/man.shtml?topic=da&category=4&russian=1
            Ответить
            • показать все, что скрытоvanished
              Ответить
            • Вот кстати наличие man по драйверам это один из ста сорока девяти пунктов, по которым прыще соснули у бзды.

              Вообще построение дерева устройств и привязка драйверов к ним у бзды прозрачнее и проще. А у прыщей куча разрозненных утилит, и ноголомный /sys.

              Ну, как всегда в общшем
              Ответить
        • показать все, что скрытоvanished
          Ответить
          • Виндопердолик.
            Ответить
          • Можно, я переносил с hdd на nvme недавно. Но я не раздел dd'шил, а весь диск целиком. С разделами лень было заморачиваться.
            Ответить
            • Я просто акронисом клон диска делал.
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • Акронис купи. Ну и с ssd'шками обычно какую-нибудь тулу для переноса данных дают в комплекте.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Можешь, если на другом диске раздел точно такого же размера.

                    Но система может не заработать из-за того, что в реестре жёстко прописаны пути к разделу. Если поедут буквы дисков, нумерация физических дисков и разделов, то придётся загружаться с другого носителя и патчить реестр.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • все что угодно. Хотя с плюсами дела обстоят еще хуже - компилятор при встрече UB может даже убить твою собаку.
                        Ответить
                      • Смонтироваться на новом месте он может по-другому.

                        В принципе, если старый диск был первым физическим, система была установлена на первый раздел, и на новом месте система тоже будет на первом физическом и тоже на первом разделе, то по идее должно работать.

                        Хотя если используется GPT, то там же разделы нумеруются GUID'ами. Если переносишь не диск целиком, а только один раздел, GUID'ы могут не совпасть...

                        bormand, выручай. Винде важен GUID раздела, с которого грузиться или нет?
                        Ответить
                        • Я не помню как винда ищет разделы, поизучай сам. Вроде по айдишнику в их заголовке. Маппинг в реестре и BCD видно, посмотри что там указано.
                          Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • Тяжелее всего, если приходится менять букву. Я помню, как чувак пытался перетащить Windows с диска C: на диск D:. Поменял в реестре все упоминания «C:\» на «D:\». Потом оказалось, что пути есть не только в строковых значениях, но и в двоичных, причём и в UCS-2, и в восьмибитной кодировке.

                            Короче, букву раздела при переезде лучше сохранять.
                            Ответить
                            • Это стопудово.

                              Я вообще всё целиком скопирну
                              Ответить
                      • Винда охуеет от двух дисков с одинаковым айди и один из них поменяет. В итоге одна из копий грузиться перестанет.

                        Именно поэтому я за загрузку с чего-то в духе прыщефлешки. Там думать вообще не надо. Главное не забудь потом старый диск выдрать или форматнуть.
                        Ответить
                      • я как-то акронисом переносил Win7 с большого винта на мелкий (т.к. нужно было большой спиздить с работы). Винда не захотела запускаться, пришлось с установочного диска выполнять восстановление загрузчика. Юзер подмены не заметил.
                        Ответить
                        • Папа мне принёс с работы настоящую пилу.
                          Ответить
                          • и сказал: "пили атканчай"
                            Ответить
                            • Золотая хуицаа, золотая!
                              Наполняет ароматом атканчая
                              Дом в котором счастье обитает,
                              Золотая хуицаа, Золотая…
                              Ответить
                  • Можешь. Только не забудь все разделы размонтировать перед этим.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Через перезагрузку в свою ось, лол (обычные прыщи вроде). А бекапы вроде через снепшоты создают, да.
                        Ответить
                        • Старые версии таких программ вообще перезагружались в DOS, а из-под него запускалась программа, использующая библиотеку Zinc.

                          https://web.archive.org/web/19980212102430/www.zinc.com:80/download/free/zaf.htm

                          Старый «Zinc» имитировал окошки «Windows 3.1», а более новые версии — окошки «Windows 95/98».

                          У «Цинка» появился свободный клон:
                          http://www.openzinc.com/Screenshots.html

                          Более новые версии дисковых утилит уже вместо DOS стали использовать Linux или Windows.
                          Ответить
              • AOMEI называется бесплатная тула, ею скопировал.
                Ответить
                • Всё равно объбался: чтобы перенести не весь диск кластер-в-кластер, а только то, что занято, AOMEI пересозадла файловую систему, и в PBP записала ей другой ID.

                  Bootmg поднялся (потому что он адресуется через биос), а Winloader нет.

                  пришлось грузить с флешки "ERD Commander" и править BCD. Правда ERD сам всё сделал
                  Ответить
      • показать все, что скрытоvanished
        Ответить
    • показать все, что скрытоvanished
      Ответить

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