def main(): """ Пример использования longpoll https://vk.com/dev/using_longpoll https://vk.com/dev/using_longpoll_2 """ login, password = '******', 'mypassword' vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return longpoll = VkLongPoll(vk_session) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: print('Новое сообщение:') if event.from_me: print('От меня для: ', end='') elif event.to_me: print('Для меня от: ', end='') if event.from_user: print(event.user_id) elif event.from_chat: print(event.user_id, 'в беседе', event.chat_id) elif event.from_group: print('группы', event.group_id) print('Текст: ', event.text) print() elif event.type == VkEventType.USER_TYPING: print('Печатает ', end='') if event.from_user: print(event.user_id) elif event.from_group: print('администратор группы', event.group_id) elif event.type == VkEventType.USER_TYPING_IN_CHAT: print('Печатает ', event.user_id, 'в беседе', event.chat_id) elif event.type == VkEventType.USER_ONLINE: print('Пользователь', event.user_id, 'онлайн', event.platform) elif event.type == VkEventType.USER_OFFLINE: print('Пользователь', event.user_id, 'оффлайн', event.offline_type) else: print(event.type, event.raw[1:])
def main(): if DEBUG: print("Start work!") session = requests.Session() # Авторизация пользователя: """ vk_session = vk_api.VkApi(login, password) try: vk_session.auth() except vk_api.AuthError as error_msg: print(error_msg) return """ # Авторизация группы: # при передаче token вызывать vk_session.auth не нужно """ vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото') """ vk_session = vk_api.VkApi(token=vk_token) vk = vk_session.get_api() longpoll = VkLongPoll(vk_session) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: # Отправка в Slack чат (#vk) - должен быть заранее создан у вас в Slack slack.chat.post_message('#vk', 'Новое сообщение: id{}: "{}"'.format(event.user_id, event.text)) if DEBUG: print('id{}: "{}"'.format(event.user_id, event.text), end=' ') # Ответ пользователю на сообщение в ВК. vk.messages.send( user_id=event.user_id, message="Мы получили ваше сообщение. В ближайшее время мы ответим вам." ) if DEBUG: print('ok')
def bot_processing(self): longpoll = VkLongPoll(self.vk_session) while True: try: for event in longpoll.listen(): if hasattr(event, 'type'): if event.type == VkEventType.MESSAGE_NEW: self.parse_message(event) print('Новое сообщение:') if event.from_me: print('От меня для: ', end='') elif event.to_me: print('Для меня от: ', end='') if event.from_user: print(event.user_id) elif event.from_chat: print(event.user_id, 'в беседе', event.chat_id) elif event.from_group: print('группы', event.group_id) print('Текст: ', event.text) elif event.type == VkEventType.USER_TYPING: print('Печатает ', end='') if event.from_user: print(event.user_id) elif event.from_group: print('администратор группы', event.group_id) elif event.type == VkEventType.USER_TYPING_IN_CHAT: print('Печатает ', event.user_id, 'в беседе', event.chat_id) elif event.type == VkEventType.USER_ONLINE: print('Пользователь', event.user_id, 'онлайн', event.platform) elif event.type == VkEventType.USER_OFFLINE: print('Пользователь', event.user_id, 'оффлайн', event.offline_type) else: print(event.type, event.raw[1:]) except AttributeError: print('Voice Record\n\n\n')
with open('data/birth.txt', 'r', encoding='utf-8') as birthdays: birthdays_list = birthdays.readlines() # фильмы with open('data/films.txt', 'r', encoding='utf-8') as films: film_list = films.readlines() # олипипиадные задачки with open('data/olimp.txt', 'r', encoding='utf-8') as olimp: olimp_list = olimp.readlines() with open('data/mails.txt', 'r', encoding='utf-8') as mails: mails_list = ''.join(mails.readlines()) # запуск бота for session in longpoll.listen(): if session.type == VkEventType.MESSAGE_NEW: user_message = session.text.lower() keyboard = create_keyboard(user_message) if session.to_me: if user_message == commands_list[0]: # привет send_photo( vk, session.user_id, random.choice(_EMOJIS) + random.choice(greetings_list[25:-40]), random.choice(_PICTURES['hello']), keyboard) elif user_message == commands_list[1]: # пока send_photo(
comm = int(i.raw['comment']) except: comm = 0 if payment_code == comm: return (True, i) return False def get_qiwi_payment_url(): """ функция генерирует платёжную форму для пользователя """ url = f"https://qiwi.com/payment/form/99999?extra%5B%27account%27%5D=SAINA682&extra%5B%27comment%27%5D=42345&amountInteger={qiwi_count}" \ "&amountFraction=0¤cy=643&blocked[0]=sum&blocked[1]=account&blocked[2]=comment&extra%5B%27accountType%27%5D=nickname" return url for i in longpoll.listen(): if i.type == VkEventType.MESSAGE_NEW and i.to_me: now = datetime.datetime.now().date() text = i.text.lower() # текст сообщения пользователя normaltext = i.text # текст без lower() user_id = i.user_id # id пользователя вк state = database.execute(f'SELECT state FROM users WHERE user_id={user_id}').fetchone() # получение состояния if not state is None: # проверка, есть ли юзер в базе state = state[0] def send(text, keyboard=None, id=user_id, attachments=0): """ функция отправки сообщения """ if keyboard:
def write_msg(user_id, message): vk.messages.send(user_id=user_id, message=message, random_id=random.randint(0, 2**64)) week = [ 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье' ] token = "TOKEN" # Авторизуемся как сообщество vk_session = vk_api.VkApi(token=token) longpoll = VkLongPoll(vk_session) # пример бота из учебника не работал, for event in longpoll.listen(): # поэтому код немного другой if event.type == VkEventType.MESSAGE_NEW: if event.to_me: vk = vk_session.get_api() string = '''Привет, вы можете у меня узнать день недели по дате в формате "YYYY-MM-DD"''' text = event.text try: text = text.split('-') if len(text[0]) != 4: raise Exception if len(text[1]) != 2: raise Exception if len(text[2]) != 2:
class Bot: base_reply = \ """ Тональность определяется от 0% (плохо) до 100% (хорошо) Результат для вашего запроса - {}% """ help_reply = \ """ Вы можете помочь нам, отправив сообщение с тональностью, которую вы считаете правильным """ start_msg = \ """ Это бот для тестирования системы тонального анализа, используемого на нашем сайте. Отправьте любой текст, чтобы бот определил его тональность """ def __init__(self): self.use_digital_responces = False self.session = vk_api.VkApi(token=credentials['vk_bot_key']) self.vk = self.session.get_api() self.longpoll = VkLongPoll(self.session) self.ta = SentimentAnalyser(True) self.history = {} def pool(self): for event in self.longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: request = event.text.strip() print(event.user_id, ":", ' '.join([str(x) for x in re.split('[^A-zА-я0-9]', request) if x != ''])) hist = self.history.get(event.user_id, None) try: if json.loads(event.payload).get('command', None) == 'start': self.write_msg(event.user_id, self.start_msg) continue except: pass if not request: self.write_msg(event.user_id, "Простите, но вы ничего не написали") elif request.isdecimal() and hist is not None and self.use_digital_responces: val = int(request) if val < 0 or val > 100: self.write_msg(event.user_id, "Входные данные некорректны") else: txt = ' '.join([str(x) for x in re.split('[^A-zА-я0-9]', hist) if x != '']) if txt and not txt.isdecimal(): with open('bot_results.csv', 'a') as o: o.write("{},{}\n".format(txt, val / 100.0)) self.write_msg(event.user_id, "Спасибо, ваш ответ учтен.") del self.history[event.user_id] else: res = self.ta.get_polarity(request) stid = filter(lambda x: x[1][0] <= res < x[1][1], enumerate([[0, 0.2], [0.2, 0.4], [0.4, 0.6], [0.6, 0.8], [0.8, 1]])).__next__()[0] sticker = [9027, 9020, 9034, 9008, 9009][stid] self.history[event.user_id] = request self.write_msg(event.user_id, self.base_reply.strip().format(round(res * 100, 2))) self.write_sticker(event.user_id, sticker) if self.use_digital_responces: self.write_msg(event.user_id, self.help_reply.strip()) def write_msg(self, user_id, message): self.vk.messages.send( random_id=get_random_id(), user_id=user_id, message=message, ) def write_sticker(self, user_id, id): self.vk.messages.send( random_id=get_random_id(), user_id=user_id, sticker_id=id )
random_id=random.getrandbits(64), message=text) def send_qst(u_id, q, *btns): kb = vk_api.keyboard.VkKeyboard(one_time=False, inline=True) for b in btns: kb.add_button(b, color=VkKeyboardColor.DEFAULT) vk.messages.send(user_id=u_id, random_id=random.getrandbits(64), keyboard=kb.get_keyboard(), message=q) stage = 0 for boo in longpoll.listen(): if boo.type == VkEventType.MESSAGE_NEW and boo.text and boo.to_me: u_id = boo.user_id if stage == 0: #старт и вопрос0 if boo.text == 'Начать': send_msg(u_id, hello) send_qst(u_id, questions[0], btn_texts[0]) stage = 1 else: send_msg(u_id, 'Напишите "Начать"') elif stage == 1: #ответ0 и вопрос1
def main(): session = vk_api.VkApi( token= '19a4a4d060e680a839b18d07e0923197bb60ea2ca305b2cf3358d314921047c1c57082a2204ec39290acf' ) longpoll = VkLongPoll(session) vk = session.get_api() for event in longpoll.listen(): if event.from_chat: try: ms = event.text.lower() except AttributeError: continue if "id228102740" in ms or "https://vk.com/ded_moksem" in ms: vk.messages.send(peer_id=event.peer_id, message="✅Сигнал отправлен дежурному", random_id=0) elif "add" in ms and event.user_id in allow: xid = ms[7:16] try: vk.messages.addChatUser(chat_id=event.chat_id, user_id=xid) vk.messages.send( peer_id=event.peer_id, message="✅Пользователь был добавлен в беседу", random_id=0) except Exception as error: print(error) vk.messages.send( peer_id=event.peer_id, message= "⚠Не могу добавить, проверьте его на наличие в друзьях или в беседе.", random_id=0) elif "del" in ms and event.user_id in allow: kid = ms[7:16] try: vk.messages.removeChatUser(chat_id=event.chat_id, user_id=kid) vk.messages.send( peer_id=event.peer_id, message="✅Пользователь был удалён из беседы ", random_id=0) except Exception as error: print(error) vk.messages.send(peer_id=event.peer_id, message="Не могу удалить пользователя", random_id=0) elif "chat id" in ms: vk.messages.send(peer_id=event.peer_id, message="Айди этого чата среди моих: " + str(event.chat_id), random_id=0) elif "exit" in ms and event.user_id in allow: vk.messages.send(peer_id=event.peer_id, message="Покидаю беседу", random_id=0) vk.messages.removeChatUser(chat_id=event.chat_id, member_id=228102740) if "adm" in ms: jjd = ms[7:16] if event.user_id == 228102740: try: allow.append(int(jjd)) except Exception as error: print(error) if "-adm" in ms: jjd = ms[7:16] if event.user_id == 228102740: try: allow.remove(int(jjd)) except Exception as error: print(error) elif "+друг" in ms: try: vk.friends.add(user_id=event.user_id) vk.messages.send(peer_id=event.peer_id, message="отправил заявку", random_id=0) except Exception as error: print(error) vk.messages.send(peer_id=event.peer_id, message="Не удалось отправить заявку", random_id=0) elif "report" in ms: repid = ms[11:20] vk.users.report(user_id=int(repid), type="spam") vk.messages.send(peer_id=event.peer_id, message="Жалоба на [id" + repid + "|пользователя] отправлена", random_id=0)
class ServerBot: def __init__(self, users_token=u_t, group_token=b_t): self.vk = vk_api.VkApi(token=group_token) self.long_poll = VkLongPoll(self.vk) self.users_token = users_token self.request = '' self.user_id = 0 self.state = STATUSES["hello"] self.status = 2 self.gender = 1 self.age_from: int = 18 self.age_to: int = 20 self.country = "узбекистан" self.town = "ташкент" self.user_name = "" self.user_id_db = 0 self.gender_text = "" def send_msg(self, user_id, message): self.vk.method("messages.send", { 'user_id': user_id, 'message': message, "random_id": randrange(10**7) }) def hello(self): user = BotUsers(self.user_id, self.user_name) self.user_name = know_username(self.user_id) self.send_msg( self.user_id, f"Привет {self.user_name}!\n" f"Я бот VKinder ваш помощник для помощи вводите bot_commands") self.state = STATUSES["commands"] return self.state def commands(self): return self.send_msg( self.user_id, f"Выберите команду:\n" f"Search_users: Искать людей для знакомства\n" f"News: Новости про команды Boston Celtics\n" f"History: История команды Boston Celtics и прочие материалы") def searching(self): search = search_users(self.age_from, self.age_to, self.gender, self.town, self.state, self.country) for i in search: # insert_into_searched_users(i['User_ID'], i["name"], i["town"], False, self.user_id) self.send_msg( self.user_id, f'{i["name"]}, ID: {i["User_ID"]}, ' f'жил(-а) в городе(городах):{i["town"]}') # self.send_msg(self.user_id, f"Нравится?) если да то пишите like если нет то пишите hate") self.state = STATUSES["commands"] self.send_msg( self.user_id, "Этот сеанс окончен и мы возвращаемся в состояние bot_commands") self.commands() def news(self): for news in n_c(): self.send_msg(self.user_id, news) self.send_msg( self.user_id, "Этот сеанс окончен и мы возвращаемся в состояние bot_commands") self.state = STATUSES["commands"] self.commands() def history(self): self.send_msg(self.user_id, i_s_w()) self.send_msg( self.user_id, "Этот сеанс окончен и мы возвращаемся в состояние bot_commands") self.state = STATUSES["commands"] self.commands() def talking(self): for event in self.long_poll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: self.request = event.text.lower() self.user_id = event.user_id # print(search_users(self.age_from, self.age_to, self.gender, self.town, self.status, self.country)) if self.request == "привет" and self.state == STATUSES[ "hello"]: self.hello() elif self.request == "bot_commands" and self.state == STATUSES[ "commands"]: self.commands() elif self.request == "search_users" and self.state == STATUSES[ "commands"]: self.state = STATUSES["choose_country_wait"] self.send_msg( self.user_id, f"ВНИМАНИЯ! предупреждаю вас о том когда вы наберёте не правильную" f" команду или не правильно вводите параметры поиска то это в конце" f" концов повлияет на ваш же поиск и вы не получите нужный ответ и " f"мы снова возвращаемся в bot_commands!\n" f"Поэтому просим вас быть внимательнее и правильно заполнить нужные" f" поля! спасибо за понимание)\n" f"Ну а теперь приступим к поиску)\n" f"Вводите страну поиска Например Россия, Украина, Белорусия и т.д.\n" ) elif self.state == STATUSES["choose_country_wait"]: self.state = STATUSES["choose_city_wait"] self.country = self.request self.send_msg(self.user_id, f"Вводите город поиска") elif self.state == STATUSES["choose_city_wait"]: self.town = self.request self.state = STATUSES["choose_gender"] self.send_msg( self.user_id, f"вводите пол юзера:\n" f"man - мужчина\n" f"woman - женщина\n" f"any - без разницы") elif self.request == "man" and self.state == STATUSES[ "choose_gender"]: self.gender = 2 self.gender_text = "man" self.state = STATUSES["choose_age_from"] self.send_msg( self.user_id, f"Вводите минимальный возраст пользователя " f"от 10 до 100") elif self.request == "woman" and self.state == STATUSES[ "choose_gender"]: self.gender = 1 self.gender_text = "woman" self.state = STATUSES["choose_age_from"] self.send_msg( self.user_id, f"Вводите минимальный возраст пользователя " f"от 10 до 100") elif self.request == "any" and self.state == STATUSES[ "choose_gender"]: self.gender = 0 self.gender_text = "any" self.state = STATUSES["choose_age_from"] self.send_msg( self.user_id, f"Вводите минимальный возраст пользователя " f"от 10 до 100") elif self.state == STATUSES["choose_age_from"]: self.state = STATUSES["choose_age_to"] self.age_from = self.request self.send_msg( self.user_id, f"Вводите максимальный возраст пользователя" f" и оно не должно быть меньше минимального возраста" ) elif self.state == STATUSES["choose_age_to"]: self.state = STATUSES["choose_status"] self.age_to = self.request self.send_msg( self.user_id, f"Вводите номер статуса пользователя:\n" f"1.не женат(не за мужем)\n" f"2.встречается\n" f"3.помолвлен(-а)\n" f"4.женат(за мужем)\n" f"5.всё сложно\n" f"6.в активном поиске\n" f"7.влюблен(-а)\n" f"8.в гражданском браке") elif self.state == STATUSES[ "choose_status"] and self.request == "1": self.state = STATUSES["got_it"] self.status = 1 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "choose_status"] and self.request == "2": self.state = STATUSES["got_it"] self.status = 2 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "choose_status"] and self.request == "3": self.state = STATUSES["got_it"] self.status = 3 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "choose_status"] and self.request == "4": self.state = STATUSES["got_it"] self.status = 4 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "choose_status"] and self.request == "5": self.state = STATUSES["got_it"] self.status = 5 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "choose_status"] and self.request == "6": self.state = STATUSES["got_it"] self.status = 6 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "choose_status"] and self.request == "7": self.state = STATUSES["got_it"] self.status = 7 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "choose_status"] and self.request == "8": self.state = STATUSES["got_it"] self.status = 8 self.send_msg(self.user_id, f"Хотите начать?\n" f"пишите да или нет") elif self.state == STATUSES[ "got_it"] and self.request == "да": self.state = STATUSES["commands"] self.send_msg( self.user_id, f'Параметры поиска вашей половинки:\n' f'Минимальный возраст: {self.age_from},\n' f'Максимальный возраст: {self.age_to},\n' f'Город: {self.town},\n' f'Пол: {self.gender_text},\n' f'Страна: {self.country},\n' f'Семейное положение: {self.status}') self.searching() elif self.state == STATUSES[ "got_it"] and self.request == "нет": self.send_msg( self.user_id, f"Вы выбрали команду нет поэтому мы возвращаемся в состояние hello" ) self.state = STATUSES["hello"] self.hello() elif self.request == "news" and self.state == STATUSES[ "commands"]: self.news() elif self.request == "history" and self.state == STATUSES[ "commands"]: self.history() else: self.send_msg( self.user_id, "ERROR! Вы набрали не правильную команду или где то " "допустили ошибку! поэтому вернёмся в Hello") self.state = STATUSES["hello"] self.hello()
remember_device = True return key, remember_device vk_session = vk_api.VkApi(login, password, auth_handler=auth_handler) try: vk_session.auth() except vk_api.AuthError as error_msg: print(error_msg)''' ================================================="РЕгистрация для группы"========================================== vk_session = vk_api.VkApi(token=token) session_api = vk_session.get_api() longpool = VkLongPoll(vk_session) while True: for event in longpool.listen(): if event.type == VkEventType.MESSAGE_NEW: print(f'Message time is {datetime.strftime(datetime.now(), "%H:%M:%S")}') print(f'Message text : {event.text}') response = event.text.lower() if event.from_user and not event.from_me: response_for_user = main.send_message(event.text) vk_session.method('messages.send', { 'user_id': event.user_id, 'message': response_for_user, 'random_id': random.randint(0, 2000000) })
] # обьявление базовых переменных, соединение с ВК allowed_ids = [int(num) for num in parameters_lines[1].split(",")] allowed_chats = [int(num) for num in parameters_lines[2].split(",")] log_id = [int(num) for num in parameters_lines[3].split(",")] index = int(parameters_lines[4]) delay = int(parameters_lines[5]) cmd_prefix = parameters_lines[6] cmd_eval = parameters_lines[7] safe_eval = parameters_lines[9] reg_warn = parameters_lines[10] vk_session = vk_api.VkApi(token=parameters_lines[0]) long_poll = VkLongPoll(vk_session) vk = vk_session.get_api() event = long_poll.listen() def get_time(): # возвращает время формата ДД.ММ.ГГ ЧЧ:ММ:СС (по МСК) # например, 01.01.01 13:37:00 return datetime.datetime.strftime( datetime.datetime.now(pytz.timezone('Europe/Moscow')), "%d.%m.%Y %H:%M:%S") def console_log(text, symbols_amount=30): # выводит данные в консоль с указанием времени и интервалом после print("[" + get_time() + "] " + text) print("-" * symbols_amount)
class Server: def __init__(self, api_token, server_name: str = "Empty"): # Даем серверу имя self.server_name = server_name # Для Long Poll self.vk = vk_api.VkApi(token=api_token) # Для использования Long Poll API self.long_poll = VkLongPoll(self.vk) # Для вызова методов vk_api self.vk_api = self.vk.get_api() def send_msg(self, send_id, message): """ Отправка сообщения через метод messages.send :param send_id: vk id пользователя, который получит сообщение :param message: содержимое отправляемого письма :return: None """ self.vk_api.messages.send(peer_id=send_id, message=message) def start(self): global q global mode global vino_dict global mail_dict vino_dict = vino.Bot() eat_dict = model.FoodGetter() mail_dict = Mail.wise_bot() eat_dict.load("ingredients.csv", "doc2vec_model", "annoy_model_") mode = {} q = 0 print('всё подгрузил') for event in self.long_poll.listen(): # Слушаем сервер # Пришло новое сообщение if event.type == VkEventType.MESSAGE_NEW and event.to_me: q += 1 username = self.get_user_name(event.user_id) if session.query(User).filter( User.user_id == event.user_id).first(): Server.user_log(event.user_id, event.text) if event.user_id not in mode: mode[event.user_id] = [0] print(mode) if mode[event.user_id][0] == 3 and event.text == \ 'Красное вино': vino_red = mode[event.user_id][1] for i in range(len(vino_red[1])): if i < 5: self.send_message(event.user_id, event.random_id, vino_red[1][i]['name'] + ", " + vino_red[1][i][ 'sugar'] + ', ' + str(vino_red[1][i][ 'rating'])) else: break self.send_message(event.user_id, event.random_id, 'Это выборка красного вина', keyboard="keyboard.json") mode[event.user_id][0] = 0 continue elif mode[event.user_id][0] == 3 and event.text == \ 'Белое ' \ 'вино': vino_white = mode[event.user_id][1] for i in range(len(vino_white[2])): if i < 5: self.send_message(event.user_id, event.random_id, vino_white[2][i]['name'] + ", " + vino_white[2][i][ 'sugar'] + ', ' + str(vino_white[2][i][ 'rating'])) else: break self.send_message(event.user_id, event.random_id, 'Это выборка белого вина', keyboard="keyboard.json") mode[event.user_id][0] = 0 continue if mode[event.user_id][0] == 3 and event.text == \ 'Розовое ' \ 'вино': vino_pink = mode[event.user_id][1] if len(vino_pink[3]) == 0: self.send_message(event.user_id, event.random_id, 'Нет винишка', keyboard="keyboard.json") mode[event.user_id][0] = 0 continue for i in range(len(vino_pink[3])): if i < 5: self.send_message(event.user_id, event.random_id, vino_pink[3][i]['name'] + ", " + vino_pink[3][i][ 'sugar'] + ', ' + str(vino_pink[3][i][ 'rating'])) else: break self.send_message(event.user_id, event.random_id, 'Это выборка розового вина', keyboard="keyboard.json") mode[event.user_id][0] = 0 continue if mode[event.user_id][0] == 3 and event.text == 'Другие ' \ 'функции': self.send_message(event.user_id, event.random_id, 'Выбирай ' 'что-то', keyboard='keyboard.json') mode[event.user_id][0] = 0 continue elif mode[event.user_id][0] == 1 and event.text == \ 'Другие функции': self.send_message(event.user_id, event.random_id, 'Выбирай ' 'что-то', keyboard='keyboard.json') mode[event.user_id][0] = 0 continue elif mode[event.user_id][0] == 1: if len(event.text) > 70: self.send_message(event.user_id, event.random_id, 'Многа букав', keyboard="keyboard.json") mode[event.user_id][0] = 0 else: try: user_film = self.packYandex('ru-en', event.text) except (Exception) as e: self.send_message(event.user_id, event.random_id, 'Yandex умер( \n') print(user_film) films = Film.film_advice().give_film(str(user_film)) if films[0] == "incorrect request": self.send_message(event.user_id, event.random_id, "Фильмы закончились", keyboard='keyboard2.json') mode[event.user_id][0] = 0 else: for i in films: try: message = self.packYandex('en-ru', i) except (Exception) as e: self.send_message(event.user_id, event.random_id, 'Yandex умер( \n') try: kinopoisk(i) except (Exception) as e: self.send_message(event.user_id, event.random_id, 'Кинопоиск крякнул( \n') self.photo_user(event.user_id, event.random_id, 'Оригинальное название: ' + i + '\nПереведенное ' 'название: ' + message, 'kinopoisk.jpg') self.send_message(event.user_id, event.random_id, "\nKinopoisk " + "думает, что это:", keyboard='keyboard2.json') elif mode[event.user_id][0] == 2 and event.text == \ 'Другие ' \ 'функции': self.send_message(event.user_id, event.random_id, 'Выбирай что-то', keyboard='keyboard.json') mode[event.user_id][0] = 0 elif mode[event.user_id][0] == 2: if len(event.text) > 70: self.send_message(event.user_id, event.random_id, 'Многа букав', keyboard="keyboard.json") mode[event.user_id][0] = 0 else: try: text = self.packYandex('ru-en', event.text) except (Exception) as e: self.send_message(event.user_id, event.random_id, 'Yandex умер( \n') Server.user_log(event.user_id, event.text) temp = eat_dict.find(text, 5) if len(temp) == 0: self.send_message(event.user_id, event.random_id, 'Останешься голодным или попробуй ввести больше ингридиентов', keyboard="keyboard2.json") mode[event.user_id][0] = 2 else: for i, j, _id in eat_dict.find(text, 5): i = self.packYandex('en-ru', i) j = self.packYandex('en-ru', j) self.send_message(event.user_id, event.random_id, i + ": " + j) self.send_message(event.user_id, event.random_id, 'Кушай на здоровье!', keyboard="keyboard2.json") elif mode[event.user_id][0] == 3: if len(event.text) > 70: self.send_message(event.user_id, event.random_id, 'Многа букав', keyboard="keyboard.json") mode[event.user_id][0] = 0 else: try: vino_all = vino_dict.find_buchlo( event.text) if len(mode[event.user_id]) == 1: mode[event.user_id].append(vino_all) else: mode[event.user_id][1] = vino_all for i in range(5): self.send_message(event.user_id, event.random_id, vino_all[0][i]['name'] + ", " + vino_all[0][i][ 'sugar'] + ', ' + str(vino_all[0][i][ 'rating'])) self.send_message(event.user_id, event.random_id, 'Это общая выборка вин', keyboard="keyboard1.json") except: self.send_message(event.user_id, event.random_id, 'Сегодня ты трезвый!', keyboard='keyboard.json') mode[event.user_id][0] = 0 elif mode[event.user_id][0] == 0 and event.text == \ "Описание фильма": self.send_message(event.user_id, event.random_id, f'{username}, опиши фильм!') mode[event.user_id][0] = 1 elif mode[event.user_id][0] == 0 and event.text == \ "Описание еды": self.send_message(event.user_id, event.random_id, f'{username}, опиши еду!') mode[event.user_id][0] = 2 elif mode[event.user_id][0] == 0 and event.text == \ "Описание вина": self.send_message(event.user_id, event.random_id, f'{username}, опиши вино!') mode[event.user_id][0] = 3 else: if len(event.text) > 70: self.send_message(event.user_id, event.random_id, 'Многа букав', keyboard="keyboard.json") mode[event.user_id][0] = 0 else: mas = mail_dict.give_answer(event.text) if mas[0] == 'incorrect request': self.send_message(event.user_id, event.random_id, 'https://vk.com/video?z=video273519762_456239269%2Fpl_cat_updates', keyboard="keyboard.json") mode[event.user_id][0] = 0 else: if len(mas[0]) > 4000: self.send_message(event.user_id, event.random_id, 'Слишком длинное сообщение для вк', keyboard="keyboard.json") mode[event.user_id][0] = 0 else: self.send_message(event.user_id, event.random_id, mas[0], keyboard="keyboard.json") mode[event.user_id][0] = 0 elif event.text in token_list: user = User(user_id=event.user_id) session.add(user) session.commit() self.send_message(event.user_id, event.random_id, 'https://vk.com/video?q=welcom%20to%20the%20club&z=video171354828_171644015') self.send_message(event.user_id, event.random_id, f'{username}, теперь ты авторизован!', keyboard='keyboard.json') self.photo_user(event.user_id, event.random_id,'Оригинальное название: ', 'kinopoisk.jpg') else: self.send_message(event.user_id, event.random_id, 'https://vk.com/videos147211044?z=video-145643494_456243932%2Fpl_147211044_-2') self.send_message(event.user_id, event.random_id, f'Привет, {username}! У тебя нет доступа, пришли мне токен!') def get_user_name(self, user_id): """ Получаем имя пользователя""" return self.vk_api.users.get(user_id=user_id)[0]['first_name'] def get_user_city(self, user_id): """ Получаем город пользователя""" return \ self.vk_api.users.get(user_id=user_id, fields="city")[0]["city"][ 'title'] def photo_user(self, user_id, random_id, message, filename): data = self.vk_api.photos.getMessagesUploadServer(user_id=-190332116) print(data) upload_url = data["upload_url"] files = {'photo': open(filename, 'rb')} response = requests.post(upload_url, files=files) result = json.loads(response.text) print(result) uploadResult = self.vk_api.photos.saveMessagesPhoto( server=result["server"], photo=result["photo"], hash=result["hash"]) self.vk_api.messages.send(user_id=user_id, random_id=random_id, message=message, attachment='photo-190332116_' + str(uploadResult[0]["id"])) def send_message(self, peer_id, random_id, message, keyboard=None): if keyboard is not None: self.vk_api.messages.send(peer_id=peer_id, random_id=random_id, message=message, keyboard=open(keyboard, "r", encoding="UTF-8").read()) if keyboard is None: self.vk_api.messages.send(peer_id=peer_id, random_id=random_id, message=message) @staticmethod def packYandex(len, text_msg): url_trans = 'https://translate.yandex.net/api/v1.5/tr.json/translate' if len == 'ru-en': trans_option = {'key': tokenYA, 'lang': 'ru-en', 'text': text_msg} webRequest = requests.get(url_trans, params=trans_option) s = loads(webRequest.text, encoding='utf-8') if s["code"] != 200: raise Exception(f"Yandex api crash") data = s["text"][0] return data elif len == "en-ru": trans_option = {'key': tokenYA, 'lang': 'en-ru', 'text': text_msg} webRequest = requests.get(url_trans, params=trans_option) s = loads(webRequest.text, encoding='utf-8') if s["code"] != 200: raise Exception(f"Yandex api crash") data = s["text"][0] return data @staticmethod def user_log(user_id, text): row = Log(user_id=user_id, text=text.strip( ), date=datetime.datetime.now().strftime("%Y-%m-%d " "%H:%M:%S")) session.add(row) session.commit() @staticmethod def last_query(user_id): print(session.query(Log).get(user_id))
def run(self): longpoll = VkLongPoll(vk_session) while True: for event in longpoll.listen(): print(event) if event.type == VkEventType.MESSAGE_NEW: print('Новое сообщение:') if event.from_me: print('От меня для: ', end='') elif event.to_me: if event.text.lower() in list(responses.keys( )) and config_json["changeable_config"][ "bool_responses_on"] == True: write_msg(event.user_id, responses[event.text.lower()]) elif event.text[0] == config_json["com_symbol"]: print("COMMAND") command = event.text[1:].split() print(command[0]) if command[0] in list( config_json["commands"].keys()): if event.user_id in owner_id or config_json[ "commands"][command[0]["public"]]: write_msg( event.user_id, globals()[config_json["commands"][ command[0]]["func"]](*command[1:])) else: write_msg( event.user_id, "Команда не доступна для пользователей." ) #elif command[0] in list(config_json["public_commands"].keys()): # write_msg(event.user_id, globals()[config_json["public_commands"][command[0]]](*command[1:])) else: write_msg(event.user_id, "Команда не найдена.") #if event.text[1:] in list(config_json["commands"].keys()): else: write_msg(event.user_id, event.text) print('Для меня от: ', end='') if event.from_user: print(event.user_id) elif event.from_chat: print(event.user_id, 'в беседе', event.chat_id) elif event.from_group: print('группы', event.group_id) print('Текст: ', event.text) print() if (event): print(event) elif event.type == VkEventType.USER_TYPING: print('Печатает ', end='') if event.from_user: print(event.user_id) elif event.from_group: print('администратор группы', event.group_id) elif event.type == VkEventType.USER_TYPING_IN_CHAT: print('Печатает ', event.user_id, 'в беседе', event.chat_id) elif event.type == VkEventType.USER_ONLINE: print('Пользователь', event.user_id, 'онлайн', event.platform) elif event.type == VkEventType.USER_OFFLINE: print('Пользователь', event.user_id, 'оффлайн', event.offline_type) else: print(event.type, event.raw[1:])
def main(): #try: #vk_auth session = requests.Session() level2 = [] level3 = [] level4 = [] ids = [] days_mass = [] Ids_mass = [] #vk_session = vk_api.VkApi(token='42117b3a93e9f6f9bb1de66446b4856a460db93cf87bff530e62de233503df5c42c13203de0f3a0ec3cc6')#quant vk_session = vk_api.VkApi( token= '069d9ce67dc166da0a16c9b233575e280daa970b2884df2dec367532d5798f9c87963d600a69ca66feb60' ) #buhi vk = vk_session.get_api() upload = VkUpload(vk_session) # Для загрузки изображений longpoll = VkLongPoll(vk_session) text = 'Вы хотите забронировать Хайтек цех ?' keyboard = VkKeyboard(one_time=True) keyboard_2 = VkKeyboard(one_time=True) text_button11 = "Привет" text_button12 = "Бронь" text_button13 = "Погода" text_button21 = "В начало" text_button22 = "След. даты" text_button23 = "" text_button31 = "Назад" text_button32 = "Выход" hide_key = 0 ##для каждого айди keyboard.add_button(text_button11, color=VkKeyboardColor.DEFAULT) keyboard.add_button(text_button12, color=VkKeyboardColor.DEFAULT) keyboard.add_button(text_button13, color=VkKeyboardColor.DEFAULT) keyboard.add_line() # Переход на вторую строку keyboard.add_button(text_button21, color=VkKeyboardColor.NEGATIVE) kb_m = keyboard days_plus = 0 book_date = datetime.datetime.utcnow().isoformat() for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #print('написал id{}: "{}"'.format(event.user_id, event.text), end=' ') #jhg=vk.users.get(user_id=event.user_id) #name_user=jhg[0]['first_name']+' '+jhg[0]['last_name'] #print (name_user + " : " + event.text) print("message from user -- " + str(event.user_id)) if event.text == text_button21: ##в начало days_plus = 0 text = "Добро пожаловать, воспользуйтесь клавиатурой" kb_m = keyboard if event.user_id in level4: level4.remove(event.user_id) Ids_mass.pop(level4.index(event.user_id)) if event.user_id in level3: level3.remove(event.user_id) if event.user_id in level2: days_mass.pop(level2.index(event.user_id)) level2.remove(event.user_id) #четвертый уровень################################################## add info elif event.user_id in level4: asdasd = vk.users.get(user_id=event.user_id) name_user = asdasd[0]['first_name'] + ' ' + asdasd[0][ 'last_name'] text = ( 'Вы, ' + name_user + ", успешно забронировали и можете посмотреть на это в календаре https://calendar.google.com/calendar/b/1?cid=aHRib29raW5nZWtiQGdtYWlsLmNvbQ " ) booking_by_eventId(Ids_mass[level4.index(event.user_id)], name_user, event.text) Ids_mass.pop(level4.index(event.user_id)) level4.remove(event.user_id) kb_m = keyboard #vk.messages.send(user_id=19132305,random_id=get_random_id(),message=("Ура, забронили, "+name_user)) vk.messages.send(user_id=1295019, random_id=get_random_id(), message=("Ура, забронили, " + name_user)) #третий уровень####################################################################time choose elif event.user_id in level3: if event.text == 'К выбору даты': #### на пред. уровень level3.remove(event.user_id) level2.append(event.user_id) days_mass.append(0) text = "Когда хотите посетить ХайТек цех ?" date_1 = datetime.datetime.today() d1 = (date_1 - datetime.timedelta( hours=(datetime.datetime.now().hour))) d2 = (d1 + datetime.timedelta(days=1)) d3 = (d1 + datetime.timedelta(days=2)) d4 = (d1 + datetime.timedelta(days=3)) kb_m = get_date_buttons(d1, d2, d3, d4) else: if event.text == time_format(ids[1][0]): Ids_mass.append(ids[0][0]) elif event.text == time_format(ids[1][1]): Ids_mass.append(ids[0][1]) elif event.text == time_format(ids[1][2]): Ids_mass.append(ids[0][2]) elif event.text == time_format(ids[1][3]): Ids_mass.append(ids[0][3]) elif event.text == time_format(ids[1][4]): Ids_mass.append(ids[0][4]) level3.remove(event.user_id) level4.append(event.user_id) text = "Какое оборудование и материалы будут необходимы?" kb_m = keyboard_2 #второй уровень elif event.user_id in level2: ##обрабатываем дату ############################################################выбор даты№№№№№№№№№№№№№№№№№№№№№№№№ if event.text == d1.strftime( "%d-%m-%Y") or event.text == d2.strftime( "%d-%m-%Y") or event.text == d3.strftime( "%d-%m-%Y") or event.text == d4.strftime( "%d-%m-%Y"): #print("trigger 1") if event.text == d1.strftime("%d-%m-%Y"): ids = id_events_call(d1) elif event.text == d2.strftime("%d-%m-%Y"): ids = id_events_call(d2) elif event.text == d3.strftime("%d-%m-%Y"): ids = id_events_call(d3) else: ids = id_events_call(d4) if ids[1][0] == 'zero': text = 'В этот день Hi-tech цех уже занят, выберете другую дату' elif ids[1][1] == 'zero': kb_m = get_time_buttons(time_format(ids[1][0]), 'zero', 'zero', 'zero', 'zero') text = 'Одно свободное окно на выбранную дату' if event.user_id in level2: days_mass.pop(level2.index(event.user_id)) level2.remove(event.user_id) if event.user_id not in level3: level3.append(event.user_id) elif ids[1][2] == 'zero': kb_m = get_time_buttons(time_format(ids[1][0]), time_format(ids[1][1]), 'zero', 'zero', 'zero') text = 'Два свободных окна на выбранную дату, выберете время' if event.user_id in level2: days_mass.pop(level2.index(event.user_id)) level2.remove(event.user_id) if event.user_id not in level3: level3.append(event.user_id) elif ids[1][3] == 'zero': kb_m = get_time_buttons(time_format(ids[1][0]), time_format(ids[1][1]), time_format(ids[1][2]), 'zero', 'zero') text = 'Три свободных окна на выбранную дату, выберете время' if event.user_id in level2: days_mass.pop(level2.index(event.user_id)) level2.remove(event.user_id) if event.user_id not in level3: level3.append(event.user_id) elif ids[1][4] == 'zero': kb_m = get_time_buttons(time_format(ids[1][0]), time_format(ids[1][1]), time_format(ids[1][2]), time_format(ids[1][3]), 'zero') text = 'Четыре свободных окна на выбранную дату, выберете время' if event.user_id in level2: days_mass.pop(level2.index(event.user_id)) level2.remove(event.user_id) if event.user_id not in level3: level3.append(event.user_id) elif ids[1][5] == 'zero': kb_m = get_time_buttons(time_format(ids[1][0]), time_format(ids[1][1]), time_format(ids[1][2]), time_format(ids[1][3]), time_format(ids[1][4])) text = 'Пять свободных окон на выбранную дату, выберете время' if event.user_id in level2: days_mass.pop(level2.index(event.user_id)) level2.remove(event.user_id) if event.user_id not in level3: level3.append(event.user_id) #kb_m=get_time_buttons(time_format(ids[1][0]),time_format(ids[1][1]),time_format(ids[1][1]),time_format(ids[1][1])) ######Вот здесь надо поработать, создание кнопок времени и тд #else: #kb_m=get_time_buttons(time_format(ids[1][0]),time_format(ids[1][1]),time_format(ids[1][2]),time_format(ids[1][3])) # text='Весь день свободен' #else: # print("else works") # if event.user_id in level2: # days_mass.pop(level2.index(event.user_id)) # level2.remove(event.user_id) # if event.user_id not in level3: # level3.append(event.user_id) elif event.text == text_button22: #след неделя days_mass[level2.index( event.user_id)] = days_mass[level2.index( event.user_id)] + 4 #days_mass.append(0) days_plus = days_mass[level2.index(event.user_id)] date_1 = datetime.datetime.today() + datetime.timedelta( days=days_plus) d1 = date_1 - datetime.timedelta( hours=(datetime.datetime.now().hour)) d2 = (d1 + datetime.timedelta(days=1)) d3 = (d1 + datetime.timedelta(days=2)) d4 = (d1 + datetime.timedelta(days=3)) # print('secind date') #print(days_plus) kb_m = get_date_buttons(d1, d2, d3, d4) ######################################################################################################################################### #если юзер нажал на бронь elif event.text in booking_asso and event.user_id not in level2: text = "Когда хотите посетить Hi-tech цех?" date_1 = datetime.datetime.today() d1 = (date_1 - datetime.timedelta(hours=(datetime.datetime.now().hour))) d2 = (d1 + datetime.timedelta(days=1)) d3 = (d1 + datetime.timedelta(days=2)) d4 = (d1 + datetime.timedelta(days=3)) # print('first date') kb_m = get_date_buttons(d1, d2, d3, d4) if event.user_id not in level2: level2.append(event.user_id) days_mass.append(0) # print(str(level2.index(event.user_id))+' номер юзера') #если юзер нажал привет elif event.text in hello_asso and event.user_id not in level2: text = "Привет" #если юзер нажал на погоду elif event.text in weather_asso and event.user_id not in level2: text = Weather.get_weather_today() elif event.user_id in level2: text = "мне нужна дата" else: text = "Воспользуйтесь клавиатурой" kb_m = keyboard ##vk.messages.send(user_id=event.user_id,random_id=get_random_id(),keyboard=get_time_buttons(time_format(ids[1][0]),time_format(ids[1][1]),time_format(ids[1][1]),time_format(ids[1][1])).get_keyboard(),message=text) if kb_m == keyboard_2: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=text) else: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), keyboard=kb_m.get_keyboard(), message=text)
def main(): session = requests.Session() data = pd.read_excel('user_data.xlsx', header=0) print(data) uid = np.squeeze(data[['ID']].values) names = np.squeeze(data[['Имя']].values) vorname = data[['Фамилия']] fathername = data[['Отчество']] bday = data[['Дата рождения']] isreg = data[['ISREG']] vid = np.squeeze(data[['UID']].values) # Авторизация пользователя: """ login, password = '******', 'mypassword' vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return """ # Авторизация группы (для групп рекомендуется использовать VkBotLongPoll): # при передаче token вызывать vk_session.auth не нужно vk_session = vk_api.VkApi( token= 'adab1fa6eddbb4fcb0b897ef8372cb95c042700616fcb7b3bc615e352c5df8910138e9d4bd63e05386a7e' ) for i in range(0, len(vid)): vid[i] = 0 vk = vk_session.get_api() upload = VkUpload(vk_session) # Для загрузки изображений longpoll = VkLongPoll(vk_session) isFound = False for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: print('id{}: "{}"'.format(event.user_id, event.text), end=' ') print(isFound) for i in range(0, len(vid)): if (int(event.user_id - vid[i]) == 0): print("Found") isFound = True text = "Здравствуйте, " + names[i] vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=text) break data = event.text.split(" ", 1) com = data[0] print(data) if (com == "!id"): print("Регистрация...") s = event.text l = len(s) integ = [] i = 0 while i < l: s_int = '' a = s[i] while '0' <= a <= '9': s_int += a i += 1 if i < l: a = s[i] else: break i += 1 if s_int != '': integ.append(int(s_int)) idd = integ for i in range(0, len(uid)): if (idd == uid[i]): vid[i] = str(event.user_id) print(int(event.user_id - vid[i])) #print(vid) print("User is registered") isFound = True text = " " for i in range(0, len(vid)): if (int(event.user_id - vid[i]) == 0): print("Found") isFound = True text = "Здравствуйте, " + names[i] vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=text) break break if (com == "!next"): (x, y) = getVector(generate()) text = str(getNext(x)) draw(y) vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=text) if (com == "!comp"): login, password = '******', 'fedor12345' vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return userid = event.user_id """ В VkUpload реализованы методы загрузки файлов в ВК """ upload = vk_api.VkUpload(vk_session) photo = upload.photo( # Подставьте свои данные 'pie.png', album_id=261375384, group_id=179758165) vk_photo_url = 'https://vk.com/photo{}_{}'.format( photo[0]['owner_id'], photo[0]['id']) vk_session = vk_api.VkApi( token= 'adab1fa6eddbb4fcb0b897ef8372cb95c042700616fcb7b3bc615e352c5df8910138e9d4bd63e05386a7e' ) vk = vk_session.get_api() upload = VkUpload(vk_session) # Для загрузки изображений longpoll = VkLongPoll(vk_session) vk.messages.send(user_id=userid, random_id=get_random_id(), message="Диаграмма ваших интересов") vk.messages.send(user_id=userid, random_id=get_random_id(), message=vk_photo_url) print('ok')
def main(): session = vk_api.VkApi(token=token) longpoll = VkLongPoll(session) vk = session.get_api() my_id = vk.users.get()[0]['id'] dostup.add(my_id) for event in longpoll.listen(): if event.type != VkEventType.MESSAGE_NEW: continue def send(text: str): vk.messages.send(peer_id=event.peer_id, random_id=0, message=text) msg = event.text.lower() if event.from_chat: from_id = event.user_id if msg == "": xz=0 #print(f"БЕСЕДА: {from_id}: Отправил(а) стикер, видео или фото.") else: xz=1 #print(f"БЕСЕДА: {from_id}: {event.text}") elif event.from_user: from_id = my_id if event.from_me else event.peer_id if msg == "": print(f"ЛС: {from_id}: Отправил(а) стикер, видео или фото.") else: print(f"ЛС: {from_id}: {event.text}") if from_id in muted_for_all: vk.messages.delete(message_ids=event.message_id, delete_for_all=1) elif from_id in muted_for_me: vk.messages.delete(message_ids=event.message_id, delete_for_all=0) if from_id in dostup: if msg.startswith(prefix): msg = msg.replace(prefix, '', 1).strip() user = vk.messages.getById(message_ids=event.message_id)["items"][0]["reply_message"]["from_id"] if msg == "+мут": muted_for_all.add(user) send(f"✅Удаление сообщений [id{user}|пользователя] для всех установлено.") if msg == "-мут": muted_for_all.remove(user) send(f"✅Удаление сообщений [id{user}|пользователя] для всех отключено.") if msg == "+игнор": muted_for_me.add(user) send(f"✅Удаление сообщений [id{user}|пользователя] для себя установлено.") if msg == "-игнор": muted_for_me.remove(user) send(f"✅Удаление сообщений [id{user}|пользователя] для себя отключено.") if msg == "+доступ": dostup.add(user) sync_access() send(f"[id{user}|Пользователю] выдан доступ.") if msg == "-доступ": dostup.remove(user) sync_access() send(f"[id{user}|Пользователю убран доступ.") elif msg.startswith(remote_prefix) and from_id != my_id: send(event.text[2:])
from vk_api.longpoll import VkLongPoll, VkEventType import api # Работа с сообщениями longPoll = VkLongPoll(api.vk) # Основной цикл for event in longPoll.listen(): # Если пришло новое сообщение if event.type == VkEventType.MESSAGE_NEW: # Если оно имеет метку для меня( то есть бота) if event.to_me: # Сообщение от пользователя text = event.text api.write_msg(event.user_id, 'Прочитал ваше сообщение + {}'.format(text))
def main(): token = 'token' vk_session = vk_api.VkApi(token=token) vk = vk_session.get_api() longpoll = VkLongPoll(vk_session) summary = ''' Вот что я умею: /help - сводка по командам /n - новости /m - мем /w - получить сведения о погоде в Москве (Команды с /w пока могут не работать) /w <город> - погода на сегодня. Это может занять некоторое время. /exr - получить курсы основных валют /exr <XXX> - получить информацию по 1 валюте при помощи её чаркода, чем XXX и является. Например, получить информацию о Евро: /exr EUR ↓↓↓ /c - получить чаркоды валют /a - скачать прикреленные к команде аудиозаписи, это может занять некоторое время. /f <жанр> - случайный фильм с таким жанром /f жанры - показывает все доступные жанры ''' for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me: random_id = get_random_id() user_id = event.user_id msg = event.text.lower() kwargs = {'user_id': user_id, 'random_id': random_id} if msg in ('/help', 'начать'): vk.messages.send(message=summary, keyboard=enable_keyboard(), **kwargs) elif msg == '/n': vk.messages.send(message=get_news(), **kwargs) elif msg == '/m': vk.messages.send(attachment=get_meme('-157645793'), **kwargs) elif '/w' in msg: vk.messages.send(message=get_weather(msg[8:].strip()), **kwargs) elif '/exr' in msg: vk.messages.send(message=get_exchange_rate(msg[9:].strip().upper()), **kwargs) elif msg == '/c': vk.messages.send(message=get_char_codes(), **kwargs) elif msg == '/a': vk.messages.send(message=download_audio(vk, user_id), **kwargs) elif msg == '/f жанры': vk.messages.send(message=get_genre_names(), **kwargs) elif '/f' in msg: vk.messages.send(message=get_film(msg[2:].strip()), **kwargs) else: vk.messages.send(message='''Я не понимаю то, что вы написали. Отправьте /help, чтобы увидеть сводку по командам''', **kwargs)
class VkBot: def __init__(self, api_token): self.session = vk_api.VkApi(token=api_token) self.long_poll = VkLongPoll(self.session) self.vk = self.session.get_api() def listen_chat(self): for event in self.long_poll.listen(): if self.event_is_valid(event): try: Thread(target=self.give_response, args=(event.text, event.user_id)).start() except Exception: pass def give_response(self, event_text, event_user_id): response = self.message_handler(event_text) self.send_response(response, event_user_id) def message_handler(self, message_text): if message_text == 'help': view = ViewAllCommands() return view.get_view() if len(message_text.split()) == 2: username, profile = message_text.split() if profile == 'pvp': return self.get_wf_user_pvp_profile(username) elif profile == 'pve': return self.get_wf_user_pve_profile(username) return self.get_wf_user_profile(message_text) def get_wf_user_profile(self, username): wf_user = WarfaceUserProfile(username) return self.get_wf_user_profile_view(wf_user) def get_wf_user_pvp_profile(self, username): wf_pvp_user = WarfaceUserMainPvp(username) return self.get_wf_user_pvp_view(wf_pvp_user) def get_wf_user_pve_profile(self, username): wf_pve_user = WarfaceUserMainPve(username) return self.get_wf_user_pve_view(wf_pve_user) def get_wf_user_pve_view(self, wf_user): view_profile = ViewPveProfile(wf_user) return view_profile.get_view_profile() def get_wf_user_profile_view(self, wf_user): view_profile = ViewProfile(wf_user) return view_profile.get_view_profile() def get_wf_user_pvp_view(self, wf_user): view_profile = ViewPvpProfile(wf_user) return view_profile.get_view_profile() def send_response(self, msg, user_id): self.vk.messages.send(user_id=user_id, message=msg, random_id=random.randint(1, 10**10)) def event_is_valid(self, event): return event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text and event.from_user
def main(): vk_session = vk_api.VkApi(token='...') vk = vk_session.get_api() longpoll = VkLongPoll(vk_session) keyboard1 = VkKeyboard(one_time=True) keyboard1.add_button('на сегодня', color=VkKeyboardColor.POSITIVE) keyboard1.add_button('на завтра', color=VkKeyboardColor.NEGATIVE) keyboard1.add_line() keyboard1.add_button('на эту неделю', color=VkKeyboardColor.PRIMARY) keyboard1.add_button('на следующую неделю', color=VkKeyboardColor.PRIMARY) keyboard1.add_line() keyboard1.add_button('какая неделя?') keyboard1.add_button('какая группа?') users = {} week_days = [ 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота' ] months = [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ] get_schedule_from_mirea() get_weather_from_site() for event in longpoll.listen(): if event.to_me and event.type == VkEventType.MESSAGE_NEW and ( event.text.lower() == 'привет' or event.text.lower() == 'начать'): print('New from {}, text = {}'.format(event.user_id, event.text)) vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message= 'Введите номер группы один раз, чтобы я знал Вашу группу\nВведите "бот"(добавте номер группы или день недели для более точного результата),чтобы получить расписание\nВведите "погода",чтобы узнать погоду на сегодня в Москве' ) elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'погода': print('New from {}, text = {}'.format(event.user_id, event.text)) vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=str_weather()) elif event.to_me and event.type == VkEventType.MESSAGE_NEW and re.search( r'\w{4}-\d\d-\d\d', event.text) and len( event.text.split()) == 1: users[event.user_id] = event.text vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Я запомнил, что Вы из группы ' + event.text) elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'бот' and len(event.text.split()) == 1: print('New from {}, text = {}'.format(event.user_id, event.text)) try: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Показать расписание группы ' + users[event.user_id], keyboard=keyboard1.get_keyboard()) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and len( event.text.split()) == 2 and event.text.split()[0].lower( ) == 'бот' and event.text.split()[1].lower() in week_days: print('New from {}, text = {}'.format(event.user_id, event.text)) try: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=show_schedule_for_day_on_week( users[event.user_id], week_days.index(event.text.split()[1]))) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and len( event.text.split()) == 2 and event.text.split()[0].lower( ) == 'бот' and re.search(r'\w{4}-\d\d-\d\d', event.text): print('New from {}, text = {}'.format(event.user_id, event.text)) users[event.user_id] = event.text.split()[1] try: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Показать расписание группы ' + users[event.user_id], keyboard=keyboard1.get_keyboard()) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and len( event.text.split()) == 3 and event.text.split()[0].lower( ) == 'бот' and event.text.split()[1].lower( ) in week_days and re.search(r'\w{4}-\d\d-\d\d', event.text): print('New from {}, text = {}'.format(event.user_id, event.text)) users[event.user_id] = event.text.split()[2] try: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=show_schedule_for_day_on_week( users[event.user_id], week_days.index(event.text.split()[1]))) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'на сегодня': print('New from {}, text = {}'.format(event.user_id, event.text)) d = datetime.datetime.now() try: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message='Расписписание на ' + str(d.day) + ' ' + months[d.month - 1] + ':\n' + show_schedule_for_day(users[event.user_id], d)) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'на завтра': print('New from {}, text = {}'.format(event.user_id, event.text)) d = datetime.datetime.now() + datetime.timedelta(days=1) try: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message='Расписписание на ' + str(d.day) + ' ' + months[d.month - 1] + ':\n' + show_schedule_for_day(users[event.user_id], d)) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'какая неделя?': print('New from {}, text = {}'.format(event.user_id, event.text)) d = datetime.datetime.now() vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Идёт ' + str(d.isocalendar()[1] - 6) + ' неделя') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'какая группа?': print('New from {}, text = {}'.format(event.user_id, event.text)) d = datetime.datetime.now() vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Показываю расписание группы ' + users[event.user_id]) elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'на эту неделю': print('New from {}, text = {}'.format(event.user_id, event.text)) d = datetime.datetime.now() try: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=show_schedule_for_week( users[event.user_id], d)) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower( ) == 'на следующую неделю': print('New from {}, text = {}'.format(event.user_id, event.text)) d = datetime.datetime.now() + datetime.timedelta(days=7) try: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=show_schedule_for_week( users[event.user_id], d)) except Exception: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Невозможно выполнить команду') elif event.to_me: print('New from {}, text = {}'.format(event.user_id, event.text)) vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='Неизвестная команда')
class VkBot: GREETINGS, MENU_CHOOSING, USER_ANSWER_PROCESSING = range(3) def __init__(self, group_token): self._vk_session = vk_api.VkApi(token=group_token) self._vk_api = self._vk_session.get_api() self._longpoll = VkLongPoll(self._vk_session) self._state = VkBot.GREETINGS def start(self): for event in self._longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me: if self._state == VkBot.GREETINGS: self._greetings_state(event) elif self._state == VkBot.MENU_CHOOSING: self._menu_choosing_state(event) elif self._state == VkBot.USER_ANSWER_PROCESSING: self._answer_processing_state(event) def _greetings_state(self, event): keyboard = VkKeyboard() keyboard.add_button('Новый вопрос', color=VkKeyboardColor.DEFAULT) keyboard.add_button('Сдаться', color=VkKeyboardColor.DEFAULT) keyboard.add_line() keyboard.add_button('Мой счет', color=VkKeyboardColor.DEFAULT) self._vk_api.messages.send( user_id=event.user_id, message='Привет! Я бот для викторин!', keyboard=keyboard.get_keyboard(), random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING def _menu_choosing_state(self, event): if event.text == 'Новый вопрос': try: quiz_question = QuizQuestion.get_random_question_from_storage() except (redis_exceptions.DataError, ValueError) as e: logger.error('An error occurred during object initialization. ' 'User_id: {}, error: {}'.format( event.user_id.message.chat_id, str(e))) self._vk_api.messages.send( user_id=event.user_id, message='Пожалуйста, попробуйте снова.', random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING return None try: user_question = UserQuestion( event.user_id, json.dumps(dataclasses.asdict(quiz_question))) user_question.save_to_db() except redis_exceptions.DataError as e: logger.error( 'An error occurred during saving data to database.' 'User_id: {}, record: {}, error: {}'.format( event.user_id.message.chat_id, dataclasses.asdict(quiz_question), str(e), )) self._vk_api.messages.send( user_id=event.user_id, message='Пожалуйста, попробуйте снова.', random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING return None self._vk_api.messages.send( user_id=event.user_id, message=quiz_question.question, random_id=random.randint(1, 1000), ) self._state = VkBot.USER_ANSWER_PROCESSING elif event.text == 'Мой счет': user_rating = UserRating(event.user_id) score = user_rating.get_rating() self._vk_api.messages.send( user_id=event.user_id, message=f'Ваш результат: {score}', random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING return None def _answer_processing_state(self, event): user_question = UserQuestion.get_by_user_id(event.user_id) if event.text == 'Сдаться': if user_question.question is None: self._vk_api.messages.send( user_id=event.user_id, message='Пожалуйста, попробуйте снова.', random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING return None quiz_question_dict = json.loads(user_question.question) quiz_question = QuizQuestion(**quiz_question_dict) self._vk_api.messages.send( user_id=event.user_id, message=f'Внимание, правильный ответ: {quiz_question.answer}' f'Для следующего вопроса нажмите «Новый вопрос».', random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING return None if user_question.question is None: self._vk_api.messages.send( user_id=event.user_id, message='Пожалуйста, попробуйте снова.', random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING return None quiz_question_dict = json.loads(user_question.question) quiz_question = QuizQuestion(**quiz_question_dict) normalized_answer_from_user = event.text.lower().strip() normalized_answer_from_base = quiz_question.answer.lower().strip() if normalized_answer_from_base == normalized_answer_from_user: user_rating = UserRating(event.user_id) user_rating.increase_rating() self._vk_api.messages.send( user_id=event.user_id, message='Правильно! Поздравляю! ' 'Для следующего вопроса нажмите «Новый вопрос».', random_id=random.randint(1, 1000), ) self._state = VkBot.MENU_CHOOSING return None self._vk_api.messages.send( user_id=event.user_id, message='Неправильно... Попробуешь ещё раз?', random_id=random.randint(1, 1000), ) self._state = VkBot.USER_ANSWER_PROCESSING return None
def monitor_msg(vk_session, session_api, members): longpoll = VkLongPoll(vk_session) # users_not_msg = 0 while True: try: for event in longpoll.listen(): # Вывод сообщение по ивенту: НОВОЕ СООБЩЕНИЕ if event.type == VkEventType.MESSAGE_NEW: print("Время сообщения: " + str(event.datetime)) print("Сообщение: " + str(event.text)) # Преобразование всего текста в нижний регистр response = event.text.lower() # Присоеденение к БД # 0 - участник группы # 1 - админ группы # 2 - админ админов группы if event.from_user and not event.from_me: db = sqlite3.connect('server.db') sql = db.cursor() dataCopy = sql.execute( f"SELECT permession FROM users WHERE idlogin = '******' AND permession = '{1}'" ) if dataCopy.fetchone() is None: values = 0 else: values = 1 db.close() if event.user_id == my_id: values = 2 new_keyboard = keyboard.create_keyboard( response, values) # Если нажимают: "1" if (response == 'рассылка') and (values == 1 or values == 2): print("Ввели команду: рассылка") with open("buff_text\Инструкция.txt", 'r', encoding="utf-8") as f: message_main = f.read() send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"{message_main}", keyboard=new_keyboard, attachment=None) elif response == 'начать' or response == 'вернуться назад': with open("buff_text\Приветствие.txt", 'r', encoding="utf-8") as f: message_main = f.read() with open("buff_text\hello_for_users.txt", 'r', encoding="utf-8") as f: hello_users = f.read() name = session_api.users.get( user_ids=event.user_id)[0]["first_name"] print("Ввели команду: начать") if values == 1 or values == 2: send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Привет, {name}! 👿 {message_main}", keyboard=new_keyboard, attachment=None) else: send_message( vk_session, id_type='user_id', id_user=event.user_id, message=f"Привет, {name}! {hello_users}", keyboard=new_keyboard, attachment=None) elif response == 'о нас': print("Ввели команду: о нас") text_final = open("buff_text\аbout_text.txt", 'r', encoding="utf-8") attach_final = open("buff_text\аbout_attach.txt", 'r', encoding="utf-8") send_text_final = text_final.read() send_attach_final = attach_final.read() text_final.close() attach_final.close() send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"{send_text_final}", keyboard=None, attachment=f"{send_attach_final}") elif response == 'закрыть клавиатуру': print("Ввели команду: закрыть клавиатуру") send_message(vk_session, id_type='user_id', id_user=event.user_id, message="Вы закрыли клавиатуру", keyboard=new_keyboard, attachment=None) elif (response == 'создать рассылку') and (values == 1 or values == 2): print("Ввели команду: создать рассылку") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= "Введите сообщение и прекрипите вложение!", keyboard=None, attachment=None) text_send_in = open('buff_text\Текст рассылки.txt', 'w', encoding='utf-8') attach_send_in = open( 'buff_text\Вложение рассылки.txt', 'w', encoding='utf-8') text_send_in.truncate() attach_send_in.truncate() elif (response == 'отправить рассылку') and (values == 1 or values == 2): text_final = open("buff_text\Текст рассылки.txt", 'r', encoding="utf-8") attach_final = open( "buff_text\Вложение рассылки.txt", 'r', encoding="utf-8") send_text_final = text_final.read() send_attach_final = attach_final.read() text_final.close() attach_final.close() print("Список id участников группы: " + str(members)) print("Сообщение доставляется: " + str(len(members)) + " пользовтелям...") # Цикл в котором будет происходить рассылка сообщения участникам группы # Кол-во участников регулируется переменной count_users_items for i in range(len(members)): # users_not_msg += 1 # Блок try catch, если по каким то причинам невозможна отправка сообщения участнику, # то добавляем к итератору 1 и продолжаем цикл for try: send_message( vk_session, id_type='user_id', id_user=members[i], message=f"{send_text_final}", keyboard=None, attachment=f"{str(send_attach_final)}") except vk_api.exceptions.ApiError: i += 1 print( "Пользователю не отправилось сообщение!" ) continue elif (response == 'посмотреть рассылку') and (values == 1 or values == 2): print("Ввели команду: посмотреть рассылку") text_final = open("buff_text\Текст рассылки.txt", 'r', encoding="utf-8") attach_final = open( "buff_text\Вложение рассылки.txt", 'r', encoding="utf-8") send_text_final = text_final.read() send_attach_final = attach_final.read() send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Обычная рассылка сообщений пользователям выглядит таким образом: \n\n\n {send_text_final}", keyboard=None, attachment=f"{send_attach_final}") elif (response == 'управление админами') and (values == 1 or values == 2): print("Ввели команду: управление админами") with open("buff_text\control_admin.txt", 'r', encoding="utf-8") as f: message_main = f.read() send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"{message_main}", keyboard=new_keyboard, attachment=None) text_final = open("buff_text\Текст рассылки.txt", 'w', encoding="utf-8") text_final.truncate() elif (response == 'список админов') and (values == 1 or values == 2): print("Ввели команду: список админов") db = sqlite3.connect('server.db') sql = db.cursor() dataCount = sql.execute( f"SELECT COUNT(idlogin) FROM users WHERE permession = '{1}' OR permession = '{2}'" ) numberOfRows = dataCount.fetchone()[0] # reg = re.compile('[^a-zA-Z ]') dataCopy = sql.execute( f"SELECT idlogin FROM users WHERE permession = '{1}' OR permession = '{2}'" ) values = dataCopy.fetchmany(size=numberOfRows) print("Кол во:" + str(numberOfRows)) print(type(values)) for i in range(0, numberOfRows): send_message( vk_session, id_type='user_id', id_user=event.user_id, message=f"Админ группы: id{values[i]}", keyboard=None, attachment=None) text_final = open("buff_text\Текст рассылки.txt", 'w', encoding="utf-8") text_final.truncate() elif (response == 'добавить админа') and (values == 2): print("Ввели команду: добавить админа") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Для того, чтобы добавить/удалить админа введите его id в формате: " f"111111111 и отправьте его боту.\n А затем нажмите на кнопку " f"сохранить добавление/удаление.", keyboard=None, attachment=None) text_final = open("buff_text\id админа.txt", 'w', encoding="utf-8") text_final.truncate() elif (response == 'удалить админа') and (values == 2): print("Ввели команду: удалить админа") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Для того, чтобы добавить/удалить админа введите его id в формате: " f"111111111 и отправьте его боту.\n А затем нажмите на кнопку " f"сохранить добавление/удаление.", keyboard=None, attachment=None) text_final = open("buff_text\id админа.txt", 'w', encoding="utf-8") text_final.truncate() elif response == 'узнать id': print("Ввели команду: узнать свой id") send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"Ваш id: {event.user_id}", keyboard=None, attachment=None) elif response == 'сохранить добавление': print("Ввели команду: Сохранить добавление") text_final = open("buff_text\id админа.txt", 'r', encoding="utf-8") send_text_final = text_final.read() text_final.close() db = sqlite3.connect('server.db') sql = db.cursor() sql.execute( f'UPDATE users SET permession = {1} WHERE idlogin = "******"' ) db.commit() db.close() send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"Права обновлены!", keyboard=None, attachment=None) text_final = open("buff_text\id админа.txt", 'w', encoding="utf-8") text_final.truncate() elif response == 'сохранить удаление': print("Ввели команду: Сохранить удаление") text_final = open("buff_text\id админа.txt", 'r', encoding="utf-8") send_text_final = text_final.read() text_final.close() db = sqlite3.connect('server.db') sql = db.cursor() sql.execute( f'UPDATE users SET permession = {0} WHERE idlogin = "******"' ) db.commit() db.close() send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"Права обновлены!", keyboard=None, attachment=None) text_final = open("buff_text\id админа.txt", 'w', encoding="utf-8") text_final.truncate() elif (response == 'рассылкаопрос') and (values == 1 or values == 2): print("Ввели команду: рассылкаопрос") with open("buff_text\poll_msg.txt", 'r', encoding="utf-8") as f: message_main = f.read() send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"{message_main}", keyboard=new_keyboard, attachment=None) elif (response == 'посмотреть рассылку опроса') and ( values == 1 or values == 2): print("Ввели команду: посмотреть рассылку") text_final = open("buff_text\Текст опрос.txt", 'r', encoding="utf-8") attach_final = open("buff_text\Вложение опрос.txt", 'r', encoding="utf-8") send_text_final = text_final.read() send_attach_final = attach_final.read() send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Рассылка для проголосовавших в опросе выглядит таким образом: \n\n\n{send_text_final}", keyboard=None, attachment=f"{send_attach_final}") elif (response == 'создать сообщение') and (values == 1 or values == 2): print("Ввели команду: создать сообщение") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Введите текст рассылки для проголосовавших в опросе и можете прикрепить " f"вложения...", keyboard=None, attachment=None) text_send_in = open('buff_text\Текст опрос.txt', 'w', encoding='utf-8') attach_send_in = open( 'buff_text\Вложение опрос.txt', 'w', encoding='utf-8') text_send_in.truncate() attach_send_in.truncate() elif (response == 'сохранить сообщение') and (values == 1 or values == 2): print("Ввели команду: сохранить сообщение") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Текст рассылки для опроса успешно сохранен!", keyboard=None, attachment=None) elif (response == 'создать id опроса') and (values == 1 or values == 2): print("Ввели команду: создать id опроса") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Введите id опроса в формате: 111111111", keyboard=None, attachment=None) text_send_in = open('buff_text\id опрос.txt', 'w', encoding='utf-8') text_send_in.truncate() elif (response == 'сохранить id опроса') and (values == 1 or values == 2): print("Ввели команду: сохранить id опроса") send_message( vk_session, id_type='user_id', id_user=event.user_id, message=f"Id опроса успешно сохранен!", keyboard=None, attachment=None) elif (response == "создать о нас") and (values == 1 or values == 2): print("Ввели команду: создать о нас") with open("buff_text\create_about.txt", 'r', encoding="utf-8") as f: message_main = f.read() send_message(vk_session, id_type='user_id', id_user=event.user_id, message=f"{message_main}", keyboard=new_keyboard, attachment=None) elif (response == 'создать текст') and (values == 1 or values == 2): print("Ввели команду: создать текст") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Введите текст и прекрепите вложение, а потом отправьте это " f"сообщение боту. \n Затем, нажмите кнопку: сохранить текст", keyboard=None, attachment=None) text_send_in = open('buff_text\аbout_text.txt', 'w', encoding='utf-8') attach_send_in = open('buff_text\аbout_attach.txt', 'w', encoding='utf-8') text_send_in.truncate() attach_send_in.truncate() elif (response == 'сохранить текст') and (values == 1 or values == 2): print("Ввели команду: сохранить текст") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Ваш текст сохранен! Проверьте кнопку: О нас", keyboard=None, attachment=None) elif (response == 'посмотреть о нас') and (values == 1 or values == 2): print("Ввели команду: Посмотреть о нас") text_send_in = open('buff_text\аbout_text.txt', 'r', encoding='utf-8') attach_send_in = open('buff_text\аbout_attach.txt', 'r', encoding='utf-8') send_text_final = text_send_in.read() send_attach_final = attach_send_in.read() send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Пункт меню О нас - выглядит таким образом: \n\n\n{send_text_final}", keyboard=None, attachment=f"{send_attach_final}") elif values == 1 or values == 2: msg_history = vk_session.method( 'messages.getHistory', { 'offset': 2, 'count': 1, 'user_id': event.user_id, 'group_id': vk_id_group }) msg_text = msg_history["items"][0]["text"] print("ОБРАТИ НА МЕНЯ ВНИМАНИЕ: " + str(msg_text)) if msg_text == 'создать рассылку' or msg_text == 'Создать рассылку': buff_type = [] buff_id = [] for i in range(1, 10): try: id_attach = event.attachments["attach" + str(i)] buff_id.append(id_attach) type_attach = event.attachments[ "attach" + str(i) + "_type"] buff_type.append(type_attach) except KeyError: pass buff = [] for i in range(0, len(buff_type)): buff.append( str(buff_type[i]) + str(buff_id[i])) final_buff = [] for items in buff: final_buff.append(items) attach_list = ','.join(final_buff) text_final = open( "buff_text\Текст рассылки.txt", 'r+', encoding="utf-8") attach_final = open( "buff_text\Вложение рассылки.txt", 'r+', encoding="utf-8") new_text_send = text_final.read() new_attach_send = attach_final.read() new_text_send = re.sub(new_text_send, str(event.text), new_text_send) new_attach_send = re.sub( new_attach_send, str(attach_list), new_attach_send) text_final.write(new_text_send) attach_final.write(new_attach_send) text_final.close() attach_final.close() elif msg_text == 'создать сообщение' or msg_text == 'Создать сообщение': buff_type = [] buff_id = [] for i in range(1, 10): try: id_attach = event.attachments["attach" + str(i)] buff_id.append(id_attach) type_attach = event.attachments[ "attach" + str(i) + "_type"] buff_type.append(type_attach) except KeyError: pass buff = [] for i in range(0, len(buff_type)): buff.append( str(buff_type[i]) + str(buff_id[i])) final_buff = [] for items in buff: final_buff.append(items) attach_list = ','.join(final_buff) text_final = open("buff_text\Текст опрос.txt", 'r+', encoding="utf-8") attach_final = open( "buff_text\Вложение опрос.txt", 'r+', encoding="utf-8") new_text_send = text_final.read() new_attach_send = attach_final.read() new_text_send = re.sub(new_text_send, str(event.text), new_text_send) new_attach_send = re.sub( new_attach_send, str(attach_list), new_attach_send) text_final.write(new_text_send) attach_final.write(new_attach_send) text_final.close() attach_final.close() elif msg_text == 'cоздать id опроса' or msg_text == 'Создать id опроса': text_final = open("buff_text\id опрос.txt", 'r+', encoding="utf-8") new_text_send = text_final.read() new_text_send = re.sub(new_text_send, str(event.text), new_text_send) text_final.write(new_text_send) text_final.close() elif msg_text == 'добавить админа' or msg_text == 'Добавить админа': text_final = open("buff_text\id админа.txt", 'r+', encoding="utf-8") new_text_send = text_final.read() new_text_send = re.sub(new_text_send, str(event.text), new_text_send) text_final.write(new_text_send) text_final.close() elif msg_text == 'удалить админа' or msg_text == 'Удалить админа': text_final = open("buff_text\id админа.txt", 'r+', encoding="utf-8") new_text_send = text_final.read() new_text_send = re.sub(new_text_send, str(event.text), new_text_send) text_final.write(new_text_send) text_final.close() elif msg_text == 'cоздать текст' or msg_text == 'Создать текст': buff_type = [] buff_id = [] for i in range(1, 10): try: id_attach = event.attachments["attach" + str(i)] buff_id.append(id_attach) type_attach = event.attachments[ "attach" + str(i) + "_type"] buff_type.append(type_attach) except KeyError: pass buff = [] for i in range(0, len(buff_type)): buff.append( str(buff_type[i]) + str(buff_id[i])) final_buff = [] for items in buff: final_buff.append(items) attach_list = ','.join(final_buff) text_final = open("buff_text\аbout_text.txt", 'r+', encoding="utf-8") attach_final = open( "buff_text\аbout_attach.txt", 'r+', encoding="utf-8") new_text_send = text_final.read() new_attach_send = attach_final.read() new_text_send = re.sub(new_text_send, str(event.text), new_text_send) new_attach_send = re.sub( new_attach_send, str(attach_list), new_attach_send) text_final.write(new_text_send) attach_final.write(new_attach_send) text_final.close() attach_final.close() else: print("Неопозннная команда...") send_message( vk_session, id_type='user_id', id_user=event.user_id, message= f"Я тебя не понимаю. \nДля того, чтобы посмотреть мои команды введи: начать", keyboard=None, attachment=None) except Exception as error: print(error)
class Bot: def __init__(self, i): self.token = i["token"] self.group_id = i["group_id"] self.key = i["key"] self.server = i["server"] self.ts = i["ts"] self.vk_session = vk_api.VkApi(token=self.token) self.longpoll = VkLongPoll(self.vk_session) self.vk = self.vk_session.get_api() def send_msg(self, text, peer): self.vk.messages.send( user_id = peer, random_id = get_random_id(), message = text ) def start(self): for event in self.longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text and event.user_id not in data["ban"]: """simple command""" if event.text.lower() == "/оборудование": text = "" for i in data["tech"]: text += f"{i}\n" self.send_msg(text, event.user_id) elif event.text.lower() == "/бюджет компании": self.send_msg("бюджет компании состовляет {0} рублей".format(data["money"]), event.user_id) elif event.text.lower() == "/сайт": self.send_msg(data["web-site"], event.user_id) elif event.text.lower() == "/бот": self.send_msg("бот был сделан на заказ компанией Daruna", event.user_id) elif event.text.lower() == "/проекты в разработке": text = "" for i in progects["dev"]: text += i if text == "": self.send_msg("не один проект в данный момент не разрабатывается", event.user_id) else: self.send_msg(text, event.user_id) elif event.text.lower() == "/оконченные проекты": text = "" for i in progects["ready"]: text += i if text == "": self.send_msg("не один проект в данный момент не готов", event.user_id) else: self.send_msg(text, event.user_id) elif event.text.lower() == "/приостановленные проекты": text = "" for i in progects["stoped"]: text += i if text == "": self.send_msg("в данный момент приостановленных проектов нет", event.user_id) else: self.send_msg(text, event.user_id) elif event.text.lower() == "/лучшие проекты": text = "" for i in progects["best"]: text += i if text == "": self.send_msg("в данный момент лучших проектов нет", event.user_id) else: self.send_msg(text, event.user_id) elif event.text.lower() == "/профиль": profile = f.getProfileInfo(event.user_id) if profile != None: self.send_msg("имя - {0}\nid - {1}\nуровень технологии - {2}".format(profile[0], profile[1], profile[2]), event.user_id) else: self.send_msg("вы ещё не зарегистрированны", event.user_id) elif event.text.lower().find("/зарегистрироваться") != -1: t = event.text.split(" ") if f.getProfileInfo(event.user_id) == None: data["users_id"].append(int(event.user_id)) f.register(t[1], event.user_id) self.send_msg("вы зарегистрированны под именем {0}".format(t[1]), event.user_id) else: self.send_msg("вы уже зарегистрированны", event.user_id) elif event.text.lower() == "/пользователи": self.send_msg(len(f.getUsers()), event.user_id) elif event.text.lower() == "/время компании": self.send_msg("компания ITT была создана 25 ноября 2020 года", event.user_id) elif event.text.lower() == "/команды": self.send_msg(commands, event.user_id) elif event.text.lower() == "/инфо": self.send_msg("Дарова, сейчас ты находишься в самом крутом IT сообществе IT Techlogies(ITT). \ Здесь наша команда создаёт проекты, делает игры и постит информацию об IT.\n! ПОДПИШИСЬ !", event.user_id) elif event.text.lower() == "/vip": if event.user_id in data["vip"]: self.send_msg("у вас есть подписка vip", event.user_id) else: self.send_msg("у вас нет подписки vip", event.user_id) """for VIP""" if event.user_id in data["vip"]: if event.text.lower().find("$give") != -1: msg = event.text.split(" ") if int(msg[1]) >= 1 and int(msg[1]) <= 10: print(f.add(int(msg[2]), event.user_id)) if f.add(int(msg[1]), event.user_id) == 0: self.send_msg("у пользователя(https://vk.com/id{0}) нет аккаунта".format(event.user_id), event.user_id) else: self.send_msg("пользователю(https://vk.com/id{0}) было добавленно {1} уровней технологии".format(event.user_id, msg[1]), event.user_id) """for moder""" if event.user_id in data["admins"]: if event.text.lower().find(":изменить бюджет") != -1: data["money"] = event.text.split(" ")[2] self.send_msg("теперь бюджет компании состовляет {0} рублей".format(data["money"]), event.user_id) elif event.text.lower().find(":вип") != -1: data["vip"].append(int(event.text.split(" ")[1])) self.send_msg("пользователю(https://vk.com/id{0}) был выдан статус вип".format(event.text.split(" ")[1]), event.user_id) elif event.text.lower().find(":бан") != -1: data["ban"].append(int(event.text.split(" ")[1])) self.send_msg("пользователю(https://vk.com/id{0}) был выдан бан".format(event.text.split(" ")[1]), event.user_id) elif event.text.lower().find(":новый лучший:") != -1: s = event.text.split(":") progects["best"].append(s[2]) elif event.text.lower().find(":новый готовый:") != -1: s = event.text.split(":") progects["ready"].append(s[2]) elif event.text.lower().find(":новый разрабатываемый:") != -1: s = event.text.split(":") progects["dev"].append(s[2]) elif event.text.lower().find(":новый приостановленный:") != -1: s = event.text.split(":") progects["stoped"].append(s[2]) elif event.text.lower().find(":удалить лучший:") != -1: s = event.text.split(":") try: progects["best"].remove(s[2]) except: pass elif event.text.lower().find(":удалить готовый:") != -1: s = event.text.split(":") try: progects["ready"].remove(s[2]) except: pass elif event.text.lower().find(":удалить разрабатываемый:") != -1: s = event.text.split(":") try: progects["dev"].remove(s[2]) except: pass elif event.text.lower().find(":удалить приостановленный:") != -1: s = event.text.split(":") try: progects["stoped"].remove(s[2]) except: pass
def main(): #Получение файлов расписания page = requests.get( "https://www.mirea.ru/education/schedule-main/schedule/") soup = BeautifulSoup(page.text, "html.parser") result = soup.find("div", { "id": "toggle-3" }).findAll("a", {"class": "xls"}) for x in result: if "IIT" in str(x) and "vesna" in str(x): if "1k" in str(x): f = open("1kurs.xlsx", "wb") y = requests.get(x["href"]) f.write(y.content) elif "2k" in str(x): f = open("2kurs.xlsx", "wb") y = requests.get(x["href"]) f.write(y.content) elif "3k" in str(x): f = open("3kurs.xlsx", "wb") y = requests.get(x["href"]) f.write(y.content) elif "4k" in str(x): f = open("4kurs.xlsx", "wb") y = requests.get(x["href"]) f.write(y.content) #Инициализация бота vk_session = vk_api.VkApi( token= "44c700bc6db1238b1a3086147e2c55fb21e8a69d4441d1e45bcacc06fe16eb861643c34edc0aff39c2a1d" ) vk = vk_session.get_api() longpoll = VkLongPoll(vk_session) keyboard = VkKeyboard(one_time=True) keyboard.add_button("на сегодня", color=VkKeyboardColor.POSITIVE) keyboard.add_button("на завтра", color=VkKeyboardColor.NEGATIVE) keyboard.add_line() keyboard.add_button("на эту неделю", color=VkKeyboardColor.PRIMARY) keyboard.add_button("на следующую неделю", color=VkKeyboardColor.PRIMARY) keyboard.add_line() keyboard.add_button("какая неделя?", color=VkKeyboardColor.DEFAULT) keyboard.add_button("какая группа?", color=VkKeyboardColor.DEFAULT) try: with open("users.pickle", "rb") as f: userlist = pickle.load(f) except FileNotFoundError: userlist = {} userlist2 = {} custom_mark = {} for key in userlist.keys(): custom_mark[key] = False for event in longpoll.listen(): #Первое использование бота if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.user_id not in userlist: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=instruction) userlist[event.user_id] = "" userlist2[event.user_id] = "" with open("users.pickle", "wb") as f: pickle.dump(userlist, f) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "users": vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=str(userlist)) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "помощь": vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=instruction) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match( r"\w\w\w\w-\d\d-\d\d", event.text): vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Я запомнил, что ты из группы " + event.text.upper()) userlist[event.user_id] = event.text.upper() userlist2[event.user_id] = event.text.upper() custom_mark[event.user_id] = False with open("users.pickle", "wb") as f: pickle.dump(userlist, f) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "бот": vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Показать расписание...", keyboard=keyboard.get_keyboard()) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "на сегодня": if datetime.today().weekday() == 6: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=str(datetime.today().day) + " " + mesyacy[datetime.today().month] + " занятий нет") else: try: if custom_mark[event.user_id]: book = xlrd.open_workbook( str(kurs[userlist2[event.user_id][-2:]]) + "kurs.xlsx") else: book = xlrd.open_workbook( str(kurs[userlist[event.user_id][-2:]]) + "kurs.xlsx") sheet = book.sheet_by_index(0) num_cols = sheet.ncols num_rows = sheet.nrows found = False ind = 0 for col_index in range(num_cols): group_cell = str(sheet.cell(1, col_index).value) if (custom_mark[event.user_id] and group_cell == userlist2[event.user_id] ) or (not custom_mark[event.user_id] and group_cell == userlist[event.user_id]): ind = col_index found = True break if found: schedule = "Расписание на " + str(datetime.today( ).day) + " " + mesyacy[datetime.today().month] schedule += "\n" start_row = 3 + 12 * datetime.today().weekday() if ((datetime.today() - datetime(2019, 2, 11)).days // 7 + 1) % 2 == 0: start_row += 1 print(start_row) for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=schedule) else: if custom_mark[event.user_id]: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) except KeyError: if custom_mark[event.user_id]: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) custom_mark[event.user_id] = False elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "на завтра": tomorrow = datetime.today() + timedelta(days=1) if tomorrow.weekday() == 6: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=str(tomorrow.day) + " " + mesyacy[tomorrow.month] + " занятий нет") else: try: if custom_mark[event.user_id]: book = xlrd.open_workbook( str(kurs[userlist2[event.user_id][-2:]]) + "kurs.xlsx") else: book = xlrd.open_workbook( str(kurs[userlist[event.user_id][-2:]]) + "kurs.xlsx") sheet = book.sheet_by_index(0) num_cols = sheet.ncols num_rows = sheet.nrows found = False ind = 0 for col_index in range(num_cols): group_cell = str(sheet.cell(1, col_index).value) if (custom_mark[event.user_id] and group_cell == userlist2[event.user_id] ) or (not custom_mark[event.user_id] and group_cell == userlist[event.user_id]): ind = col_index found = True break if found: schedule = "Расписание на " + str( tomorrow.day) + " " + mesyacy[tomorrow.month] schedule += "\n" start_row = 3 + 12 * tomorrow.weekday() if ((tomorrow - datetime(2019, 2, 11)).days // 7 + 1) % 2 == 0: start_row += 1 print(start_row) for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=schedule) else: if custom_mark[event.user_id]: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) except KeyError: if custom_mark[event.user_id]: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) custom_mark[event.user_id] = False elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "на эту неделю": try: if custom_mark[event.user_id]: book = xlrd.open_workbook( str(kurs[userlist2[event.user_id][-2:]]) + "kurs.xlsx") else: book = xlrd.open_workbook( str(kurs[userlist[event.user_id][-2:]]) + "kurs.xlsx") sheet = book.sheet_by_index(0) num_cols = sheet.ncols num_rows = sheet.nrows found = False ind = 0 for col_index in range(num_cols): group_cell = str(sheet.cell(1, col_index).value) if (custom_mark[event.user_id] and group_cell == userlist2[event.user_id]) or ( not custom_mark[event.user_id] and group_cell == userlist[event.user_id]): ind = col_index found = True break if found: schedule = "Расписание на " + str( (datetime.today() - datetime(2019, 2, 11)).days // 7 + 1) schedule += " неделю\n" start_row = 3 if ((datetime.today() - datetime(2019, 2, 11)).days // 7 + 1) % 2 == 0: start_row += 1 print(start_row) for j in range(6): schedule += days_of_week[j] + "\n" for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 schedule += "\n" vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=schedule) else: if custom_mark[event.user_id]: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) except KeyError: if custom_mark[event.user_id]: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) custom_mark[event.user_id] = False elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "на следующую неделю": try: if custom_mark[event.user_id]: book = xlrd.open_workbook( str(kurs[userlist2[event.user_id][-2:]]) + "kurs.xlsx") else: book = xlrd.open_workbook( str(kurs[userlist[event.user_id][-2:]]) + "kurs.xlsx") sheet = book.sheet_by_index(0) num_cols = sheet.ncols num_rows = sheet.nrows found = False ind = 0 for col_index in range(num_cols): group_cell = str(sheet.cell(1, col_index).value) if (custom_mark[event.user_id] and group_cell == userlist2[event.user_id]) or ( not custom_mark[event.user_id] and group_cell == userlist[event.user_id]): ind = col_index found = True break if found: schedule = "Расписание на " + str( (datetime.today() - datetime(2019, 2, 11)).days // 7 + 2) schedule += " неделю\n" start_row = 3 if ((datetime.today() - datetime(2019, 2, 11)).days // 7 + 2) % 2 == 0: start_row += 1 print(start_row) for j in range(6): schedule += days_of_week[j] + "\n" for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 schedule += "\n" vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=schedule) else: if custom_mark[event.user_id]: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) except KeyError: if custom_mark[event.user_id]: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist2[event.user_id]) else: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) custom_mark[event.user_id] = False elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "какая неделя?": week = (datetime.today() - datetime(2019, 2, 11)).days // 7 + 1 vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Идёт " + str(week) + " неделя") elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "какая группа?": vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Показываю расписание группы " + userlist[event.user_id]) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match( r"бот \w\w\w\w-\d\d-\d\d", event.text.lower()): userlist2[event.user_id] = re.findall( r"\w\w\w\w-\d\d-\d\d", event.text.lower())[0].upper() custom_mark[event.user_id] = True vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Показать расписание группы " + userlist2[event.user_id], keyboard=keyboard.get_keyboard()) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match( r"бот .+ \w\w\w\w-\d\d-\d\d", event.text.lower()): dow = {} for key, value in days_of_week.items(): dow[value.lower()] = key if re.findall(r"\w+", event.text.lower())[1] not in dow: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Неизвестная команда") else: group = re.findall(r"\w\w\w\w-\d\d-\d\d", event.text.upper())[0] day = dow[re.findall(r"\w+", event.text.lower())[1]] if day == 6: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="В воскресенье занятий нет") else: try: book = xlrd.open_workbook( str(kurs[group[-2:]]) + "kurs.xlsx") sheet = book.sheet_by_index(0) num_cols = sheet.ncols num_rows = sheet.nrows found = False ind = 0 for col_index in range(num_cols): group_cell = str(sheet.cell(1, col_index).value) if group_cell == group: ind = col_index found = True break if found: schedule = "Расписание на " + re.findall( r"\w+", event.text.lower())[1] schedule += "\n" start_row = 3 + 12 * day print(start_row) schedule += "Нечётный\n" for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 start_row = 3 + 12 * day + 1 print(start_row) schedule += "Чётный\n" for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=schedule) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + group) except KeyError: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + group) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match( r"бот .+", event.text.lower()): dow = {} for key, value in days_of_week.items(): dow[value.lower()] = key if re.findall(r"\w+", event.text.lower())[1] not in dow: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Неизвестная команда") else: day = dow[re.findall(r"\w+", event.text.lower())[1]] if day == 6: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="В воскресенье занятий нет") else: try: book = xlrd.open_workbook( str(kurs[userlist[event.user_id][-2:]]) + "kurs.xlsx") sheet = book.sheet_by_index(0) num_cols = sheet.ncols num_rows = sheet.nrows found = False ind = 0 for col_index in range(num_cols): group_cell = str(sheet.cell(1, col_index).value) if group_cell == userlist[event.user_id]: ind = col_index found = True break if found: schedule = "Расписание на " + re.findall( r"\w+", event.text.lower())[1] schedule += "\n" start_row = 3 + 12 * day print(start_row) schedule += "Нечётный\n" for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 start_row = 3 + 12 * day + 1 print(start_row) schedule += "Чётный\n" for i in range(6): if sheet.cell(start_row, ind).value == "": schedule += str(i + 1) + ") -" else: schedule += str(i + 1) + ") " + sheet.cell( start_row, ind).value if sheet.cell(start_row, ind + 1).value != "": schedule += ", " + sheet.cell( start_row, ind + 1).value else: schedule += ", - " if sheet.cell(start_row, ind + 2).value != "": schedule += ", " + sheet.cell( start_row, ind + 2).value else: schedule += ", - " if sheet.cell(start_row, ind + 3).value != "": schedule += ", " + sheet.cell( start_row, ind + 3).value else: schedule += ", - " schedule += "\n" start_row += 2 vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=schedule) else: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) except KeyError: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message="Некорректный номер группы - " + userlist[event.user_id]) elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower( ) == "погода": w = requests.get( "http://api.openweathermap.org/data/2.5/weather?q=moscow&appid=9b39cc1cf3f2f9d9556efd5a0acbb4f2&units=metric" ) weather = w.json() output = "Погода в Москве: " + weather_type[weather["weather"][0] ["main"]] + "\n" output += weather_description[weather["weather"][0] ["description"]] + ", температура: " output += str(int(weather["main"]["temp_min"])) + "-" + str( int(weather["main"]["temp_max"])) + "˚C\n" output += "Давление: " + str( weather["main"]["pressure"]) + " мм рт. ст., влажность: " output += str(weather["main"]["humidity"]) + "%\n" output += "Ветер: " + get_bofort( weather["wind"]["speed"]) + ", " + str( weather["wind"]["speed"]) + "м/с, " output += get_rumb(weather["wind"]["deg"]) vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message=output) elif event.type == VkEventType.MESSAGE_NEW and event.to_me: vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message="Неизвестная команда")
class ServerBot: def __init__(self, need_params, users_token=u_t, group_token=b_t, give_found_result=0): self.vk = vk_api.VkApi(token=group_token) self.users_token = users_token self.long_poll = VkLongPoll(self.vk) self.request = '' self.state = STATUSES["hello"] self.give_found_result = give_found_result self.need_params = need_params def send_msg(self, user_id, message): self.vk.method("messages.send", { 'user_id': user_id, 'message': message, "random_id": randrange(10**7) }) def send_photo(self, user_id, message, owner_photo_id, photo_id): self.vk.method( "messages.send", { 'user_id': user_id, 'message': message, "random_id": randrange(10**7), "attachment": f"photo{owner_photo_id}_{photo_id}" }) def hello(self): parsing_bot_user = parse_bot_user(self.need_params.user_id) self.need_params.user_name = parsing_bot_user["name"] self.need_params.user_surname = parsing_bot_user["surname"] self.need_params.user_gender = parsing_bot_user["gender"] self.send_msg( self.need_params.user_id, f"Привет {self.need_params.user_name}!\n" f"Я бот VKinder ваш помощник для помощи вводите bot_commands") insert_bot_user_to_vk_users(self.need_params.user_id, self.need_params.user_name, self.need_params.user_surname, self.need_params.user_gender) self.state = STATUSES["commands"] return self.state def commands(self): return self.send_msg( self.need_params.user_id, f"Выберите команду:\n" f"Search_users: Искать людей для знакомства\n" f"News: Новости про команды Boston Celtics\n" f"History: История команды Boston Celtics и прочие материалы") def searching(self): search = search_users(self.need_params.age_from, self.need_params.age_to, self.need_params.gender, self.need_params.town, self.need_params.status, self.need_params.country_id) for i in search: username = i["name"] surname = i["surname"] vk_id = i["User_ID"] city_id = i["city"]["id"] country_id = i["country"]["id"] gender_id = i["gender"] # print(city_id, city_title, country_id, gender_id) insert_searched_users_to_all_vk_users(vk_id, username, surname, gender_id, country_id, city_id, self.need_params.status) insert_searched_users(self.need_params.user_id, vk_id) self.state = STATUSES["select_users"] return search def selecting_country(self): searching = select_search_country(self.need_params.country_name) if searching: self.need_params.country_id = searching["ID"] self.need_params.country_name = searching["name"] self.state = STATUSES["choose_city_wait"] self.send_msg(self.need_params.user_id, f"Вводите город поиска") return self.state else: self.send_msg( self.need_params.user_id, "Вы ввели неправильную страну пожалуйста вводите её заново") self.state = STATUSES["choose_country_wait"] return self.state def select_city(self): searching = check_town(self.need_params.country_id, self.need_params.town) if searching: self.need_params.town_id = searching["ID"] self.need_params.town = searching["name"] self.state = STATUSES["choose_gender"] self.send_msg( self.need_params.user_id, f"вводите пол юзера:\n" f"man - мужчина\n" f"woman - женщина\n" f"any - без разницы") return self.state else: self.send_msg( self.need_params.user_id, f"Вы ввели неправильный город поиска! пожалуйста вводите её заново)\n" f" Постарайтесь вводить известные города") self.state = STATUSES["choose_city_wait"] return self.state def news(self): for news in n_c(): self.send_msg(self.need_params.user_id, news) self.send_msg( self.need_params.user_id, "Этот сеанс окончен и мы возвращаемся в состояние bot_commands") self.state = STATUSES["commands"] self.commands() def history(self): self.send_msg(self.need_params.user_id, i_s_w()) self.send_msg( self.need_params.user_id, "Этот сеанс окончен и мы возвращаемся в состояние bot_commands") self.state = STATUSES["commands"] self.commands() def got_it(self): self.state = STATUSES["got_it"] self.send_msg( self.need_params.user_id, f'Параметры поиска вашей половинки:\n' f'Минимальный возраст: {self.need_params.age_from},\n' f'Максимальный возраст: {self.need_params.age_to},\n' f'Город: {self.need_params.town},\n' f'Пол: {self.need_params.gender_text},\n' f'Страна: {self.need_params.country_name},\n' f'Семейное положение: {self.need_params.status}\n' f'Хотите начать?\n' f'пишите да или нет') return self.state def show_searched_users(self): self.give_found_result = select_searched_users_for_bot_users( self.need_params.user_id) self.send_msg(self.need_params.user_id, f"vk.com/id{self.give_found_result.found_result_vk_id}") photos = get_photos(self.give_found_result.found_result_vk_id) self.send_msg(self.need_params.user_id, "Топ 3 фотографии юзера:\n ") for a in photos: self.send_photo(self.need_params.user_id, " ", self.give_found_result.found_result_vk_id, a["ID"]) self.send_msg( self.need_params.user_id, "Нравится? если да то пишите like если нет то hate! для выхода пишите quit\n", ) self.state = STATUSES["wait_like"] return self.give_found_result def show_all_liked_users(self): liked_users = select_to_user_all_liked_users(self.need_params.user_id) for i in liked_users: self.send_msg(self.need_params.user_id, f"vk.com/id{i.found_result_vk_id}") photos = get_photos(i.found_result_vk_id) for a in photos: self.send_photo(self.need_params.user_id, " ", i.found_result_vk_id, a["ID"]) self.send_msg(self.need_params.user_id, "Этот сеанс окончен и мы вернёмся в состояние Commands") self.state = STATUSES["commands"] self.commands() def show_all_hated_users(self): hated_users = select_to_user_all_hated_users(self.need_params.user_id) for i in hated_users: self.send_msg(self.need_params.user_id, f"vk.com/id{i.found_result_vk_id}") photos = get_photos(i.found_result_vk_id) for a in photos: self.send_photo(self.need_params.user_id, " ", i.found_result_vk_id, a["ID"]) self.send_msg(self.need_params.user_id, "Этот сеанс окончен и мы вернёмся в состояние Commands") self.state = STATUSES["commands"] self.commands() def talking(self): for event in self.long_poll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: self.request = event.text.lower() self.need_params.user_id = event.user_id # print(search_users(self.age_from, self.age_to, self.gender, self.town, self.status, self.country)) if self.request == "привет" and self.state == STATUSES[ "hello"]: self.hello() elif self.request == "привет" and self.state == STATUSES[ "commands"]: self.send_msg( self.need_params.user_id, f"Мы же уже поздаровались) давай лучше выбери команду)\n" ) self.commands() elif self.request == "bot_commands" and self.state == STATUSES[ "commands"]: self.state = STATUSES["commands"] self.commands() elif self.request == "search_users" and self.state == STATUSES[ "commands"]: self.state = STATUSES["choose_country_wait"] self.send_msg( self.need_params.user_id, f"ВНИМАНИЯ! предупреждаю вас о том когда вы наберёте не правильную" f" команду или не правильно вводите параметры поиска то это в конце" f" концов повлияет на ваш же поиск и вы не получите нужный ответ и " f"мы снова возвращаемся в bot_commands!\n" f"Поэтому просим вас быть внимательнее и правильно заполнить нужные" f" поля! спасибо за понимание)\n" f"Ну а теперь приступим к поиску)\n" f"Вводите страну поиска Например Россия, Украина, Белорусия и т.д.\n" ) elif self.state == STATUSES["choose_country_wait"]: self.need_params.country_name = self.request self.selecting_country() elif self.state == STATUSES["choose_city_wait"]: self.need_params.town = self.request self.select_city() elif self.request == "man" and self.state == STATUSES[ "choose_gender"]: self.need_params.gender = 2 self.need_params.gender_text = "man" self.state = STATUSES["choose_age_from"] self.send_msg( self.need_params.user_id, f"Вводите минимальный возраст пользователя " f"от 10 до 100") elif self.request == "woman" and self.state == STATUSES[ "choose_gender"]: self.need_params.gender = 1 self.need_params.gender_text = "woman" self.state = STATUSES["choose_age_from"] self.send_msg( self.need_params.user_id, f"Вводите минимальный возраст пользователя " f"от 10 до 100") elif self.request == "any" and self.state == STATUSES[ "choose_gender"]: self.need_params.gender = 0 self.need_params.gender_text = "any" self.state = STATUSES["choose_age_from"] self.send_msg( self.need_params.user_id, f"Вводите минимальный возраст пользователя " f"от 10 до 100") elif self.state == STATUSES["choose_age_from"] and int( self.request) in range(100): self.state = STATUSES["choose_age_to"] self.need_params.age_from = self.request self.send_msg( self.need_params.user_id, f"Вводите максимальный возраст пользователя" f" и оно не должно быть меньше минимального возраста" ) elif self.state == STATUSES["choose_age_to"] and int( self.request) in range(100): self.state = STATUSES["choose_status"] self.need_params.age_to = self.request self.send_msg( self.need_params.user_id, f"Вводите номер статуса пользователя:\n" f"1.не женат(не за мужем)\n" f"2.встречается\n" f"3.помолвлен(-а)\n" f"4.женат(за мужем)\n" f"5.всё сложно\n" f"6.в активном поиске\n" f"7.влюблен(-а)\n" f"8.в гражданском браке") elif self.state == STATUSES[ "choose_status"] and self.request == "1": self.need_params.status = 1 self.got_it() elif self.state == STATUSES[ "choose_status"] and self.request == "2": self.need_params.status = 2 self.got_it() elif self.state == STATUSES[ "choose_status"] and self.request == "3": self.need_params.status = 3 self.got_it() elif self.state == STATUSES[ "choose_status"] and self.request == "4": self.need_params.status = 4 self.got_it() elif self.state == STATUSES[ "choose_status"] and self.request == "5": self.need_params.status = 5 self.got_it() elif self.state == STATUSES[ "choose_status"] and self.request == "6": self.need_params.status = 6 self.got_it() elif self.state == STATUSES[ "choose_status"] and self.request == "7": self.need_params.status = 7 self.got_it() elif self.state == STATUSES[ "choose_status"] and self.request == "8": self.need_params.status = 8 self.got_it() elif self.state == STATUSES[ "got_it"] and self.request.lower() == "да": insert_search_params(self.need_params.user_id, self.need_params.age_from, self.need_params.age_to, self.need_params.status, self.need_params.town_id, self.need_params.country_id, self.need_params.gender) self.searching() self.show_searched_users() elif self.state == STATUSES[ "got_it"] and self.request.lower() == "нет": self.send_msg( self.need_params.user_id, f"Вы выбрали команду нет поэтому мы возвращаемся в состояние Сommands" ) self.state = STATUSES["commands"] self.commands() elif self.state == STATUSES[ "wait_like"] and self.request == "like": set_like_status_and_show_status( self.give_found_result.found_result_vk_id) self.state = STATUSES["wait_like"] self.show_searched_users() elif self.state == STATUSES[ "wait_like"] and self.request == "hate": set_hate_status_and_show_status( self.give_found_result.found_result_vk_id) self.state = STATUSES["wait_like"] self.show_searched_users() elif self.state == STATUSES[ "wait_like"] and self.request == "quit": self.send_msg( self.need_params.user_id, f"хотите ли смотреть список лайкнутых или чёрный " f"список?)\n " f"Если да то пишите like_list или hate_list или exit " f"для выхода") self.state = STATUSES["wait_likekist_or_hatelist"] elif self.state == STATUSES[ "wait_likekist_or_hatelist"] and self.request == "like_list": self.show_all_liked_users() elif self.state == STATUSES[ "wait_likekist_or_hatelist"] and self.request == "hate_list": self.show_all_hated_users() elif self.state == STATUSES[ "wait_likekist_or_hatelist"] and self.request == "exit": self.state = STATUSES["commands"] self.send_msg( self.need_params.user_id, f"Этот сеанс окончен и мы вернёмся в состояние Commands" ) self.commands() elif self.request == "news" and self.state == STATUSES[ "commands"]: self.news() elif self.request == "history" and self.state == STATUSES[ "commands"]: self.history() else: self.send_msg( self.need_params.user_id, f"ERROR! Вы набрали не правильную команду или где то " f"допустили ошибку! поэтому вернёмся в Hello") self.state = STATUSES["hello"] self.hello()
class BotMainLoop(object): """ Bot main class """ def __init__(self): self.app_token = "00b73157edcc1908a48d21a259762638b7cec649e01375e2dc70f5dc5a44f2ec88c6b80d66c85df03343f" self.vk = vk_api.VkApi(token=self.app_token) self.longpoll = VkLongPoll(self.vk) self.CitiesGame = cities.Game() self.loop() def write_msg(self, user_id, random_id, message): """ Message sending function""" self.vk.method("messages.send", {"user_id": user_id, "random_id": random_id, "message": message}) def get_user_info(self, id): """ Getting user information """ try: api = vk_requests.create_api(service_token=self.app_token) user = api.users.get(user_ids=id) return user[0]['first_name'] except Exception as e: print("[Get user info] :: ", e) def loop(self): """ Main bot cycle """ print("[The bot is running]") exit = False while not exit: try: # Прием сообшений for event in self.longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: random_id = random.randrange(1, 500, 1) normal_text = event.text command = event.text.split(" ") # Приветствие if normal_text.upper() in lists.HELLO_Q: user_name = self.get_user_info(event.user_id) message = random.choice(lists.HELLO_A) + user_name + random.choice(lists.SYMBOLS) self.write_msg(event.user_id, random_id, message) # Создатель elif normal_text.upper() in lists.CREATOR_Q: message = "https://vk.com/cact_us" self.write_msg(event.user_id, random_id, message) # Прощание elif normal_text.upper() in lists.BYE_Q: message = random.choice(lists.BYE_A) self.write_msg(event.user_id, random_id, message) # Если пользователь хочет узнать текущую погоду. elif command[0].upper() == "ПОГОДА": weather_mod = Weather() try: city_id = weather_mod.searchCity(command[1]) city = command[1].capitalize() message = weather_mod.current_weather(city_id, city) self.write_msg(event.user_id, random_id, message) except Exception as e: print("[Incorrect city input (current weather)] :: ", e) self.write_msg(event.user_id, random_id, "Не могу найти информацию по Вашему запросу.") # Если пользователь хочет узнать прогноз погоды. elif command[0].upper() == "ПРОГНОЗ": weather_mod = Weather() try: city_id = weather_mod.searchCity(command[1]) city = command[1].capitalize() days = int(command[2]) message = weather_mod.weather_forecast(city_id, city, days) # self.write_msg(event.user_id, random_id, message) self.write_msg(event.user_id, random_id, "Данная функция находится в разработке.") except Exception as e: print("[Incorrect city input (weather forecast)] :: ", e) self.write_msg(event.user_id, random_id, "Не могу найти информацию по Вашему запросу.") # Игра в города elif command[0].upper() == "ГОРОДА": try: if command[0].upper() == "ГОРОДА" and command[1].upper() == "РЕСТАРТ": self.CitiesGame.resetGame() self.write_msg(event.user_id, random_id, "Игра города перезапущена!") elif command[0].upper() == "ГОРОДА" and command[1].upper() == "НАЗВАННЫЕ": message = self.CitiesGame.sendUsedCitues() self.write_msg(event.user_id, random_id, message) else: message = self.CitiesGame.gameMainLoop(command[1]) self.write_msg(event.user_id, random_id, message) except Exception as e: print("[Game cities] :: ", e) # Общение с ботом else: message = "Я вас не понимаю.(" self.write_msg(event.user_id, random_id, message) except: print("[The bot is off]") exit = True
return kb.get_keyboard() else: return kb.get_empty_keyboard() kb1 = keyboard.VkKeyboard(one_time=True) kb1.add_button('ЖКХ', color=VkKeyboardColor.PRIMARY) kb1.add_button('Житель', color=VkKeyboardColor.PRIMARY) kb_prim = Keyboards() kb_sec = Keyboards() kb2 = kb_prim.firstKB() job_done = '' keys = dbdrive.get_keys() for event in Longpoll.listen(): randomid = random.randint(1, 9999999) Check_user = False Check_JKH = False if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: # for job in jobs: # if event.text == job: if dbdrive.check_user(event.user_id): Check_user = True if dbdrive.check_jkh(event.user_id): Check_JKH = True for key in keys: if event.text == key[0] and Check_JKH is False: vk.messages.send(user_id=event.user_id, message='Теперь вы в группе ЖКХ', random_id=randomid,
def main(): bad_words = [ 'Пидор', 'Ты пидор', 'Ти пидор', 'Пэдро', 'Ты пэдро', 'Ти пэдро', 'Пыдар', 'Ты пыдар', 'Ти пыдар', 'Пидр', 'Ты пидр', 'Ти пидр', 'Пизда', 'Ты пизда', 'Ти пизда', 'Пидорас', 'Ты пидорас', 'Ти пидорас', 'Тварь', 'Ты тварь', 'Ти тварь', 'Говно', 'Ты говно', 'Ти говно', 'Сука', 'Ты сука', 'Ти сука', 'Член', 'Ты член', 'Ти член', 'Даун', 'Ты даун', 'Ти даун', 'Аутист', 'Ты аутист', 'Ти аутист', 'Долбаеб', 'Ты долбаеб', 'Ти долбаеб', 'Долбаёб', 'Ты долбаёб', 'Ти долбаёб', 'Долбоеб', 'Ты долбоеб', 'Ти долбоеб', 'Долбоёб', 'Ты долбоёб', 'Ти долбоёб', 'Говноед', 'Ты говноед', 'Ти говноед', 'Блядь', 'Ты блядь', 'Ти блядь', 'Бля', 'Блять', 'Ты блять', 'Ти блять', 'Пошел нахуй', 'Пошел ты нахуй', 'Иди нахуй', 'Иди на хуй', 'Пошел на хуй', 'Хуй', 'Ты хуй', 'Ти хуй', 'Иди в пизду', 'Пошел в пизду', 'В пизду', 'Ебать', 'Ебал', 'Ебаный', 'Ебанный', 'Ебал в рот', 'Ебаный рот', 'Ебанный рот', 'Ублюдок мать твою', 'Гей', 'Ты гей', 'Ти гей', 'Чмо', 'Ты чмо', 'Ти чмо', 'Чьмо', 'Ты чьмо', 'Ти чьмо', 'Лох', 'Ты лох', 'Ти лох', ] SHS = [ 'Саня хуй соси', 'Хуй саня соси', 'Соси хуй саня', 'Бот, скинь дз', 'Схс', 'Cхс', 'Cxс', 'Cxc', 'Сxс', 'Cxс', 'Сxc' ] rhythm = { 'Да': 'Борода', 'да': 'Борода', 'ДА': 'Борода', } commands = { '!Пидор': 'chooseOneGay()', '!пидор': 'chooseOneGay()', '!ПИДОР': 'chooseOneGay()', '!ролл': 'getRandomNumber()', '!Ролл': 'getRandomNumber()', '!РОЛЛ': 'getRandomNumber()', } login, password = '******', 'x' vk_session = vk_api.VkApi(login, password, auth_handler=auth_handler) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return longpoll = VkLongPoll(vk_session) for event in longpoll.listen(): print('New event', event.type) if event.type == VkEventType.MESSAGE_NEW: print('Новое сообщение:') if event.from_me: print('От меня для: ', end='') elif event.to_me: print('Для меня от: ', end='') if event.from_user: print(event.user_id) elif event.from_chat: print(event.user_id, 'в беседе', event.chat_id) elif event.from_group: print('группы', event.group_id) print('Текст: ', event.text) print() messageText = str(event.text) def chooseOneGay(): dict_members = vk_session.get_api( ).messages.getConversationMembers(peer_id=2000000072, fields='id') a1 = [] a2 = [] a3 = [] for mass in dict_members['profiles']: var1 = mass.get('id') a1.append(var1) var2 = mass.get('first_name') a2.append(var2) var3 = mass.get('last_name') a3.append(var3) print(a1) print(a2) print(a3) lenghtA1 = len(a1) randomGay = random.randint(0, lenghtA1 - 1) randomGayName = a2[randomGay] randomGayLastName = a3[randomGay] return randomGayName, randomGayLastName def getRandomNumber(): randomNumber = random.randint(0, 100) return randomNumber def checBadWord(): for i1 in bad_words: if messageText == i1.lower() or messageText == i1.upper( ) or messageText == i1: return True def checkSHS(): for i2 in SHS: if messageText == i2.lower() or messageText == i2.upper( ) or messageText == i2: return True def chechRhythm(): for i3 in rhythm: if messageText == i3.lower() or messageText == i3.upper( ) or messageText == i3: return True def checkCommands(): for i4 in commands: if messageText == i4.lower() or messageText == i4.upper( ) or messageText == i4: return True if checBadWord() == True: if event.from_user: vk_session.get_api().messages.send( user_id=int(event.user_id), message='Сам ' + str(event.text).lower() + '\n' + '[ BOT // ' + ' ' + datetime.datetime.today().strftime( "%Y-%m-%d; %H.%M.%S") + ' ]') elif event.from_chat: vk_session.get_api().messages.send( chat_id=int(event.chat_id), message='Сам ' + str(event.text).lower() + '\n' + '[ BOT // ' + ' ' + datetime.datetime.today().strftime( "%Y-%m-%d; %H.%M.%S") + ' ]') elif checkSHS() == True: if event.from_chat: vk_session.get_api().messages.removeChatUser( chat_id=int(event.chat_id), user_id=int(event.user_id)) elif chechRhythm() == True: if event.from_chat: vk_session.get_api().messages.send( chat_id=int(event.chat_id), message=str(rhythm.get(messageText)) + '\n' + '[ BOT // ' + ' ' + datetime.datetime.today().strftime( "%Y-%m-%d; %H.%M.%S") + ' ]') elif checkCommands() == True: if event.from_chat: commandId = commands.get(messageText) if commandId == 'chooseOneGay()': gayName, gaySurename = chooseOneGay() vk_session.get_api().messages.send( chat_id=int(event.chat_id), message='Я думаю, что пидор: \n' + str(gayName) + ' ' + str(gaySurename) + '\n' + '[ BOT // ' + ' ' + datetime.datetime.today().strftime( "%Y-%m-%d; %H.%M.%S") + ' ]') elif commandId == 'getRandomNumber()': randomNumber = getRandomNumber() vk_session.get_api().messages.send( chat_id=int(event.chat_id), message=str(randomNumber) + '\n' + '[ BOT // ' + ' ' + datetime.datetime.today().strftime( "%Y-%m-%d; %H.%M.%S") + ' ]')
def send_msgs(peers, message): #Отправить рассылку if len(peers) > 100: return peers2 = [] for f in range(len(peers)): peers2[f] = str(peers[f]) vk_session.method( "messages.send", { "user_ids": ",".join(peers2), "message": message, "random_id": randrange(0, 184467440737095516165, 1) }) for event in longpoll.listen(): #Для каждого события if event.type == VkEventType.MESSAGE_NEW: #Если событие - сообщение if event.to_me: #Если сообщение мне if event.user_id in bl: #Если человек в BlackList if not bl[event.user_id]: #Если ему ещё не присылали сообщение send_msg_without_keyboard( event.user_id, "Ошибка, вы находитесь в ЧС, если это ошибка - напишите администратору" ) #Пишу ему сообщение bl[event.user_id] = 1 #Теперь он уже видел сообщение with open(BlackListFile, "w", encoding="UTF-8") as wf: dump(bl, wf) continue #Если человек в ЧС пропускаю обработку команд author = get_user(event.user_id)[0] #Получаю профиль автора if allowTranslate: #Если включен переводчик
def main(): vk = vk_session.get_api() longpoll = VkLongPoll(vk_session) upload = VkUpload(vk_session) print("Started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: pprint(event.__dict__) print('{}: id{}: "{}"'.format(event.message_id, event.user_id, event.text)) if (event.text == ''): vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message= 'Message text is required. Please enter a name or archive and resend your message.' ) continue messages_data = vk_session.method( 'messages.getById', {'message_ids': set([ event.message_id, ])}) pprint(messages_data) messages_data = messages_data['items'][0] links = get_photos_links(messages_data) print(links) print("len = ", len(links)) if (len(links) == 0): vk.messages.send(user_id=event.user_id, random_id=get_random_id(), message='No photos') continue muid = str(event.user_id) + str(event.message_id) pics_path = os.path.join('data', muid) if not os.path.exists(pics_path): os.makedirs(pics_path) for c, plink in enumerate(links): print(c) with urllib.request.urlopen(plink) as response, open( os.path.join('data', muid, str(c) + '.jpg'), 'wb') as out_file: data = response.read() # a `bytes` object out_file.write(data) zip_name = os.path.join('data', str(muid) + ".zip") zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) zipdir(pics_path, zipf) zipf.close() doc = upload.document_message(doc=zip_name, title=event.text + str(muid) + ".zip", peer_id=event.peer_id) doc = doc['doc'] pprint(doc) vk.messages.send(user_id=event.user_id, attachment='doc{}_{}'.format( doc['owner_id'], doc['id']), random_id=get_random_id(), message='Ok. Done.') print('ok')
def main(): token = log.get_token() vk_session = vk_api.VkApi(token=token) session_api = vk_session.get_api() longpoll = VkLongPoll(vk_session) vk_session.api_version = 5.103 def send_message(vk_session, id_type, id, message=None, attachment=None, keyboard=None): vk_session.method( 'messages.send', { id_type: id, 'message': message, 'random_id': random.randint(-2147483648, 2147483648), "attachment": attachment, 'keyboard': keyboard }) while True: for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: print("Текст сообщения: " + str(event.text)) print(event.user_id) response = event.text.lower() if response.find('привет') != -1 and not (event.from_me): send_message(vk_session, 'user_id', event.user_id, message='Хай!') # get_audio.get(-210528) elif response.find('навали') != -1 and not (event.from_me): attachment = read_audio.read() send_message( vk_session, 'user_id', event.user_id, message='Наваливаю! Качает? Чи не? Трэш кал кста', attachment=attachment) elif response.find('работать') != -1: attachment = 'photo580559802_457239019' attachment += ',' + read_audio.read() create_post.create(-33731414, 'Я съел админов теперь я тут главный!', session_api, attachment) send_message(vk_session, 'user_id', event.user_id, message='Я насрал в предложку, иди чекни') elif response.find('обновить') != -1 and not (event.from_me): f = open('audio.txt', 'w') f.close() get_audio.get(-45919397) get_audio.get(-33731414) get_audio.get(-210528) get_audio.get(-8142) get_audio.get(-53939030) get_audio.get(-2036725) get_audio.get(-151574935) get_audio.get(-172750661) get_audio.get(-2052528) get_audio.get(-40631383) get_audio.get(-146296871) get_audio.get(-149627855) get_audio.get(-138087126) get_audio.get(-8938) get_audio.get(-79514555) get_audio.get(-29309560) get_audio.get(-14100092) get_audio.get(-118857127) get_audio.get(-8514382) send_message(vk_session, 'user_id', event.user_id, message='База данных успешно обновлена') elif response.find('апаге') != -1 and not (event.from_me): send_message(vk_session, 'user_id', event.user_id, message='хуйнаны', attachment='audio371745470_456292870') elif response.find('как дела') != -1 and not (event.from_me): send_message( vk_session, 'user_id', event.user_id, message='Нормалек', ) elif response.find('кто тебя создал') != -1 and not ( event.from_me): send_message(vk_session, 'user_id', event.user_id, message='https://vk.com/knuleeb') elif response.find('пока') != -1 and not (event.from_me): send_message(vk_session, 'user_id', event.user_id, message='Бывай')
if response.status_code == 200: return response.text else: return '<ошибка на сервере погоды>' def write_msg(user_id, message): random_id = vk_api.utils.get_random_id() vk.method('messages.send', { 'user_id': user_id, 'message': message, 'random_id': random_id }) vk = vk_api.VkApi(token=mytoken) longpoll = VkLongPoll(vk) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: request = event.text write_msg(event.user_id, 'Привет :)') if request in listkz: otvet = 'Погода в городе - ' + request + '\n' + what_weather( request) else: otvet = 'Пожалуйста введите название крупного города в Казахстане, например, Алматы' write_msg(event.user_id, otvet) bot.polling(none_stop=True)
def main(): session = requests.Session() # Авторизация пользователя: """ login, password = '******', 'mypassword' vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return """ # Авторизация группы (для групп рекомендуется использовать VkBotLongPoll): # при передаче token вызывать vk_session.auth не нужно """ vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото') """ vk = vk_session.get_api() upload = VkUpload(vk_session) # Для загрузки изображений longpoll = VkLongPoll(vk_session) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: print('id{}: "{}"'.format(event.user_id, event.text), end=' ') response = session.get( 'http://api.duckduckgo.com/', params={ 'q': event.text, 'format': 'json' } ).json() text = response.get('AbstractText') image_url = response.get('Image') if not text: vk.messages.send( user_id=event.user_id, random_id=get_random_id(), message='No results' ) print('no results') continue attachments = [] if image_url: image = session.get(image_url, stream=True) photo = upload.photo_messages(photos=image.raw)[0] attachments.append( 'photo{}_{}'.format(photo['owner_id'], photo['id']) ) vk.messages.send( user_id=event.user_id, attachment=','.join(attachments), random_id=get_random_id(), message=text ) print('ok')