import sys from typing import Optional from vkbottle.bot import Blueprint from utils.errors import WrongWarnsCountException from utils.main import get_user_from_mention, give_warns from utils.rules import * sys.path.append("..") bp = Blueprint(name="Working with admin functions") @bp.on.message_handler(OnlyAdminAccess(), AccessForBotAdmin(), text="бан", lower=True) async def bot_ban_message(message: Message): if message.reply_message: await message( f"ПОДТВЕРДИТЕ БАН ПОЛЬЗОВАТЕЛЯ С ID {message.reply_message.from_id}! НАПИШИТЕ 'ЗАБАНИТЬ' (ЗАГЛАВНЫМИ " f"БУКВАМИ) ДЛЯ ТОГО, ЧТОБЫ ЗАБАНИТЬ, ИЛИ 'ВЫЙТИ' (ЗАГЛАВНЫМИ), ЧТОБЫ ВЫЙТИ ИЗ ЭТОГО МЕНЮ! " ) await BOT.branch.add( message.peer_id, "bot_ban_branch", user_id=message.reply_message.from_id, admin_id=message.from_id, )
from typing import Union, Optional, Dict from vkbottle import keyboard_gen from vkbottle.bot import Blueprint, Message from vkbottle.branch import ClsBranch, rule_disposal from vkbottle.rule import PayloadRule, CommandRule, VBMLRule from aiocache import caches from keyboards import MAIN_MENU_KEYBOARD, SCHEDULE_KEYBOARD, EMPTY_KEYBOARD from typing import List, Tuple, Dict, AnyStr, Union from rules import PayloadHasKey, ExitButtonPressed from utils import fetch_json, return_to_main_menu from models import DBStoredBranch, UserState from config import Config import ujson import aiohttp bp = Blueprint(name='help') bp.branch = DBStoredBranch()
import datetime import sys from typing import Optional from vkbottle.bot import Blueprint from models import Work, Car, Conversation from utils.consts import CAR_COST_MULTIPLIER, BuyCarUserStatuses from utils.main import status_on_buy_car from utils.rules import * sys.path.append("..") bp = Blueprint(name="Working with economic system") @bp.on.message_handler(AccessForAllRule(), Registered(), text="/дать_работу <j_id>") async def give_job(message: Message, user: User, j_id: str = None): if j_id.isdigit(): j_id = int(j_id) work = await Work.get(id=j_id) if user.exp > work.exp_need: chat = await Conversation.get(peer_id=message.peer_id) await User.get(user_id=user.user_id, chat=chat).update(work=work, job_lp=datetime.datetime.now()) await message("Работа выдана!") else: await message("У вас недостаточно опыта!")
from typing import List, Union, Dict, Tuple, AnyStr, Callable import ujson from vkbottle.bot import Blueprint, Message from vkbottle.rule import VBMLRule, AbstractMessageRule, LevenshteinDisRule, PayloadRule from vkbottle.branch import ClsBranch, rule_disposal from content.news import NewsList from vkbottle.keyboard import keyboard_gen from vkbottle import PhotoUploader from models.user_state import DBStoredBranch, UserState from keyboards import MAIN_MENU_KEYBOARD, EMPTY_KEYBOARD from rules import PayloadHasKey, ExitButtonPressed from utils import return_to_main_menu bp = Blueprint(name='news') bp.branch = DBStoredBranch() @bp.on.message(VBMLRule('новости', lower=True)) async def news_handler(ans: Message): await ans( 'Нажмите "Далее", чтобы увидеть последние новости Проектного офиса', keyboard=keyboard_gen([[{ 'text': 'Далее', 'color': 'positive' }]])) await bp.branch.add(ans.from_id, 'news') class NewsBranch(ClsBranch): @rule_disposal(ExitButtonPressed())
import enum from vkbottle.bot import Blueprint, Message from timetable_text import TimetableText import requests bp = Blueprint(name="Query timetable") class TypeTimetable(enum.Enum): TEACHER = enum.auto() GROUP = enum.auto() def get_timetable_text(type_: TypeTimetable, query: str, message_not_found: str): """Получение расписания для группы (`type_ == TypeTimetable.GROUP`) или преподавателя (`type_ == TypeTimetable.TEACHER`). Если расписание подходящее под `query` не найдено, то будет возвращено `message_not_found`. """ try: timetable = TimetableText() except requests.exceptions.ConnectionError: return 'Не могу получить расписание :(' if type_ == TypeTimetable.GROUP: text = timetable.get_text_group(query) elif type_ == TypeTimetable.TEACHER: text = timetable.get_text_teacher(query) else: raise ValueError()
from vkbottle import keyboard_gen from vkbottle.bot import Blueprint, Message from vkbottle.rule import PayloadRule, VBMLRule from vkbottle.branch import ClsBranch, rule_disposal from content.faq.handler_tools import detect_intent_texts from google.api_core.exceptions import GoogleAPIError from keyboards import MAIN_MENU_KEYBOARD, EXIT_BUTTON, EMPTY_KEYBOARD from rules import ExitButtonPressed from models import DBStoredBranch from config import Config from utils import return_to_main_menu bp = Blueprint(name='faq') bp.branch = DBStoredBranch() @bp.on.message(PayloadRule({'selection': 'faq'})) async def faq_wrapper(ans: Message): await ans('Задавайте вопросы и мы попытаемся найти на них ответ!', keyboard=keyboard_gen([[EXIT_BUTTON]]) ) await bp.branch.add(ans.from_id, 'faq') class FaqDialogflowBranch(ClsBranch): async def branch(self, ans: Message, *args): try: query_result = detect_intent_texts( Config.PROJECT_ID, ans.from_id, ans.text,
import logging import random from vkbottle_types import BaseStateGroup from vkbottle.bot import Blueprint, Message from sqlalchemy.orm import sessionmaker from src.queries.queries import HiraganaCard, KatakanaCard from src.templates.poll_templates import (create_letters_poll, create_poll_template) from db_config import engine logging.basicConfig(level=logging.INFO) bl = Blueprint() Session = sessionmaker(bind=engine) class QuizStates(BaseStateGroup): QUIZ_STATE = 0 FREE_STATE = 1 def define_card_class(message_text: str) -> 'Class': if message_text == "Хирагана": return HiraganaCard elif message_text == "Катакана": return KatakanaCard @bl.on.message(state=QuizStates.QUIZ_STATE, text=["0", "1", "2", "3"]) async def quiz_handler(message: Message, **args):
from vkbottle.bot import Blueprint, Message from vkbottle import VKError from timetable_text import TimetableText from utils.random import get_random from db import session, Notify from rules import AdminMessage from main import bot bp = Blueprint(name="Notify") @bp.on.chat_message(text='/увд <group_or_teacher>', lower=True) @bp.on.message(text='увд <group_or_teacher>', lower=True) async def notify_config(msg: Message, group_or_teacher: str): is_group: bool = group_or_teacher[0].isnumeric() timetable = TimetableText() if is_group: objs_find = timetable.get_list_group(group_or_teacher) else: objs_find = timetable.get_list_teacher(group_or_teacher) if len(objs_find) > 1: text = f'Найдено несколько {"групп" if is_group else "преподователей"}: {", ".join(objs_find)}\n' \ f'Повторите команду, написав {"полный номер группы" if is_group else "полное имя преподователя"}' await msg(text) return elif len(objs_find) == 0: await msg( 'Группа не найдена' if is_group else 'Преподователь не найден')
import os import config from vkbottle.bot import Blueprint, Message from utils.photo_uploader import PhotoUploader bp = Blueprint(name="Call schedule") @bp.on.message(text=['з', 'звонки'], lower=True) async def call_schedule(msg: Message): """Расписание звонков""" if not hasattr(call_schedule, 'uploader'): call_schedule.uploader = PhotoUploader( os.path.join(config.STATIC_DIR, 'schedule.jpg'), 'schedule', msg.api) await msg(attachment=await call_schedule.uploader.id_photo, reply_to=msg.id)
import sys from typing import Optional from vkbottle.bot import Blueprint from models import Conversation, User from utils.rules import * sys.path.append("..") bp = Blueprint(name="Working with actions functions") @bp.on.chat_invite() async def invite_message(action: Message, _: Optional[User] = None): await action( 'Всем привет! Для того, чтобы я отвечал на сообщения, выдайте мне "Доступ ко всей переписке". ' 'Для доступа ко всем функциям выдайте мне права "Администратора"') await Conversation(peer_id=action.peer_id).save()
from vkbottle.bot import Blueprint, Message from vkbottle.branch import ClsBranch, rule_disposal, Branch, ExitBranch from vkbottle.keyboard import Keyboard, Text, OpenLink, keyboard_gen from vkbottle.rule import PayloadRule, VBMLRule, EventRule, Pattern, CommandRule, Any from keyboards import MAIN_MENU_KEYBOARD, EXIT_BUTTON, RESET_DIALOG_KEYBOARD, NEWS_WELCOME_KEYBOARD from models.user_state import DBStoredBranch, UserState from routes.faq import FaqDialogflowBranch from routes.mentors import MentorInfoBranch from routes.news import NewsBranch from routes.schedule import ScheduleBranch bp = Blueprint(name='main') bp.branch = DBStoredBranch() @bp.on.message(PayloadRule({'command': 'start'})) async def wrapper(ans: Message): await ans( 'Здравствуйте! В этом чат-боте вы сможете найти ' 'информацию о наставниках, проектах, различных мероприятих ' 'и многом другом.\n' 'Если у вас возникнут какие-либо вопросы, нажмите кнопку "Помощь"', keyboard=keyboard_gen(MAIN_MENU_KEYBOARD)) await bp.branch.add(uid=ans.from_id, branch='main') class MainBranch(ClsBranch): @rule_disposal(CommandRule('empty_keyboard')) async def empty_keyboard(self, ans: Message): await ans('test', keyboard=keyboard_gen([]))
from keyboards import MAIN_MENU_KEYBOARD, SCHEDULE_KEYBOARD, EMPTY_KEYBOARD from typing import List, Tuple, Dict, AnyStr, Union from content.schedule import ScheduleResponseBuilder from exceptions import ScheduleNoEntriesFoundException, ScheduleUnknownErrorException,\ ScheduleResponseFormatException,\ ScheduleMultipleChoicesException from rules import PayloadHasKey, ExitButtonPressed from utils import fetch_json, return_to_main_menu from models import DBStoredBranch, UserState from config import Config from cache_config import CACHE_CONFIG from datetime import datetime import ujson import aiohttp bp = Blueprint(name='schedule') bp.branch = DBStoredBranch() caches.set_config(CACHE_CONFIG) cache = caches.get('redis') def parse_choices(data: Dict) -> Tuple[str, List[List[Dict]]]: msg = list() keyboard = list() options = [item['name'] for item in data['choices']] msg.append('Возможно, вы имели в виду:\n') for i, option in enumerate(options):
from vkbottle.bot import Blueprint, Message from utils.random import get_random bp = Blueprint(name="Other") @bp.on.message(text=['команды', 'помощь'], lower=True) async def send_help(msg: Message): text = """Список команд: \"увд номер_группы или имя_преподавателя\" - включить уведомления \"з\" или \"звонки\" - расписание звонков \"п фамилия\" - посмотреть расписание преподавателя \"г фамилия\" - посмотреть расписание группы Посмотреть расписание просто написав номер группы или фамилию преподавателя. Можно писать фамилию и номер неполностью, например, вместо \"19ис-1\" можно написать \"19ис\".""" await msg(text, reply_to=msg.id) @bp.on.chat_action('chat_invite_user') async def add_chat(msg: Message): await msg.api.messages.send(peer_id=70140946, message=f'Новая беседа: {msg.peer_id}', random_id=get_random()) await msg( 'Для включения уведомлений напишите:\n/увд <номер_группы_или_преподавателя>.\n\n' 'Для отключения повторите команду.')
from vkbottle.bot import Blueprint, Message from loguru import logger bot = Blueprint() @bot.on.message(text="привет") @logger.catch() async def info(message: Message): #current_group = (await message.ctx_api.groups.get_by_id())[0] #await message.answer(f"Этот бот работает в разных группах. \nНазвание группы в которой вы сейчас находитесь: {current_group.name}") await message.answer(sticker_id=18463) #await message.ctx_api.messages.sendSticker(peer_id = message.peer_id, sticker_id=18463)
import os import sys from typing import Optional import aiohttp import ujson from vkbottle.bot import Blueprint from global_settings import * from utils.rules import * from utils.main import make_profile_photo, send_with_bomb, create_poll, is_replied_self, check_or_create sys.path.append("..") bp = Blueprint(name="Working with users functions") @bp.on.message_handler(AccessForAllRule(), text="привет", lower=True) async def hi_message(ans: Message): await ans("Привет, чувачелла") @bp.on.message_handler(AccessForAllRule(), text="максим", lower=True) async def maxim_message(ans: Message): await send_with_bomb( "Максим админ тут да ага бота создаватель в беседе повеливатель ага да м-да...", ans.peer_id) @bp.on.message_handler(AccessForAllRule(), text="мда", lower=True) async def mda_message(ans: Message): await send_with_bomb("Да мда конечно это такое мда что прямо м-да...",
from vkbottle.bot import Blueprint, Message bp = Blueprint() # You can add auto_rules to blueprint labeler: # bp.labeler.auto_rules.append(SomeRule()) # You can change config for blueprint labeler locally: # bp.labeler.vbml_ignore_case = True @bp.on.message(text="пока") async def bye_handler(message: Message): await message.answer("Пока...") @bp.on.message(text="до<!>свидания<!>") async def goodbye_handler(message: Message): await message.answer("Надеюсь, скоро увидимся!")
from vkbottle.bot import Blueprint, Message bp = Blueprint(name="greetings", description="It was created to welcome users") @bp.on.message_handler(text="Hello!") async def hello_wrapper(ans: Message): await ans("Hello, how are you?") @bp.on.message_handler(text="How are you doing?") async def asking(ans: Message): await ans("I'm good and you?")
from vkbottle.branch import ClsBranch, rule_disposal from vkbottle.rule import VBMLRule, PayloadRule from vkbottle.keyboard import keyboard_gen from bot import photo_uploader from config import Config from content.mentors import MentorMessageCard, MentorNotFoundException from models import DBStoredBranch, UserState from keyboards import MAIN_MENU_KEYBOARD, EMPTY_KEYBOARD, EXIT_BUTTON from utils import fetch_json, return_to_main_menu try: import ujson as json except ImportError: import json bp = Blueprint(name='mentors') bp.branch = DBStoredBranch() @bp.on.message(PayloadRule({'selection': 'mentors'})) async def wrapper(ans: Message): await bp.branch.add(ans.from_id, 'mentors') await ans( 'Вы можете узнать о наставнике отправив мне его/её фамилию.\n' 'Если я смогу найти наставника с такой фамилией, я покажу вам информацию о нем' 'и его контактные данные.', keyboard=keyboard_gen([[EXIT_BUTTON]], one_time=True)) class MentorInfoBranch(ClsBranch): @rule_disposal(VBMLRule('выйти', lower=True))
from vkbottle.bot import Blueprint, Message bp = Blueprint(name="Farewells") @bp.on.message_handler(text=["Goodbye!", "Bye!"]) async def farewell_wrapper(ans: Message): await ans("Bye, nice to meet you.") @bp.on.message_handler(text="Sorry, I gotta go") async def leaving(ans: Message): await ans("Bet, see you later.") @bp.on.message_handler(text="New description <text>") async def set_description(ans: Message, text: str): bp.description(text) await ans("The description of the blueprint has changed!")