Змея / Говнокод #26652 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 AlexandrovRoman, (Updated )

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

  • > документация к api
    > ссылкой на ютуб

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

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

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

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

          Таблица 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('Модератор вам скоро ответит, пожалуйста подождите.')
    Ответить
  • Мял тайна еъна хьо са до1у х1ар суьре
    Массера йахьаш ю са мукъне гуш
    Хьо гаре са тесна йара со 1уьре
    Ткъа х1ара совг1ат ду суьрено луш
    Ответить
    • Твёрдый, мягкий знак и единицу не по назначению обычно используют вайнахи и какие-то дагестанцы.

      Какое отношение стихотворение имеет к коду?
      Ответить
          • А в линуксе (и вообще везде в униксе) -- man du
            Ответить
          • Вот кстати наличие man по драйверам это один из ста сорока девяти пунктов, по которым прыще соснули у бзды.

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

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

                Кроме шуток: я могу открыть объект Harddisk , скачать с него блоками по 4096, и пснуть их на другой Harddsik?

                Это же за час пишется
                Ответить
                • Можешь, если на другом диске раздел точно такого же размера.

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

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

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

                      bormand, выручай. Винде важен GUID раздела, с которого грузиться или нет?
                      Ответить
                      • Я не помню как винда ищет разделы, поизучай сам. Вроде по айдишнику в их заголовке. Маппинг в реестре и BCD видно, посмотри что там указано.
                        Ответить
                      • В BCD у бутменеджера там физическая тупология типа
                        \Device\HarddiskVolume1

                        А у winloaderа уже может быть и "том C:".

                        привязка тома к букве хранится в реестре, но не помню где.
                        Каждая NTFS в районе своего BPB имеет GUID, по нему драйвер ntfs и создает ссылку в виде \dosdevices\C:
                        Ответить
                        • Тяжелее всего, если приходится менять букву. Я помню, как чувак пытался перетащить Windows с диска C: на диск D:. Поменял в реестре все упоминания «C:\» на «D:\». Потом оказалось, что пути есть не только в строковых значениях, но и в двоичных, причём и в UCS-2, и в восьмибитной кодировке.

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

                      Именно поэтому я за загрузку с чего-то в духе прыщефлешки. Там думать вообще не надо. Главное не забудь потом старый диск выдрать или форматнуть.
                      Ответить
                    • я как-то акронисом переносил Win7 с большого винта на мелкий (т.к. нужно было большой спиздить с работы). Винда не захотела запускаться, пришлось с установочного диска выполнять восстановление загрузчика. Юзер подмены не заметил.
                      Ответить
                • Можешь. Только не забудь все разделы размонтировать перед этим.
                  Ответить
                  • А как акронис работает? Через VSS?
                    Ответить
                    • Через перезагрузку в свою ось, лол (обычные прыщи вроде). А бекапы вроде через снепшоты создают, да.
                      Ответить
              • Всё равно объбался: чтобы перенести не весь диск кластер-в-кластер, а только то, что занято, AOMEI пересозадла файловую систему, и в PBP записала ей другой ID.

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

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

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8