La création de la base du bot comprendra les étapes suivantes:
- Créer un bot dans VK
- Génération de clés API
- Création d'un programme de bot via LongPoolVK
À qui s'adresse cet article?
L'article est conçu pour les programmeurs débutants. La méthode de travail du programme est très simple et toute personne connaissant la syntaxe Python et connaissant un peu la POO pourra l'implémenter pour ses besoins. Mais en principe, même sans connaître les principes de la POO, je pense que vous pouvez apprendre à ajouter des fonctions simples ou au moins dans les cas extrêmes à utiliser des sources prêtes à l'emploi de GitHub.
Que contient cet article?
Création de la base du bot. Après cela, il peut être programmé comme vous le souhaitez. Automatisez une routine ou utilisez-la comme interlocuteur.
Amélioré (version légèrement compliquée du bot). J'ai décidé d'introduire d'abord un code procédural simple du bot, puis de le compliquer légèrement en ajoutant des fonctions qui améliorent considérablement le bot.
Ajout de la fonction de transfert météo. Nous apprendrons au bot à nous dire la météo.
Créer un bot dans VK
Nous allons commencer par créer un bot, à savoir un groupe en VK.
Pour ce faire, allez dans "groupes" → "créer une communauté".
Sélectionnez n'importe quel type de communauté et entrez un nom, un thème de groupe.
Sur la page des paramètres qui s'ouvre, sélectionnez "Travailler avec l'API"
Ensuite, vous devez créer une clé API.
Sélectionnez ensuite les paramètres dont vous avez besoin avec un accès pour votre clé API.
Très probablement, vous devrez confirmer l'action dans VK en utilisant votre téléphone portable. Copiez ensuite la clé API résultante quelque part dans un fichier. Nous en avons encore besoin.
Ensuite, vous devez autoriser les messages. Pour ce faire, accédez au "message" et activez-les.
Passons à la partie programme du bot
Nous ne l'implémenterons pas par le biais de requêtes au VK, ou pour être plus précis, nous utilisons simplement la bibliothèque VkLongPool, qui le fera pour nous.
Cela nécessite la bibliothèque vk_api. Installez-le via pip:
python -m pip install vk_api
Mais personnellement, je travaille avec l'environnement virtuel d'Anaconda. Cela pose souvent des problèmes lors du premier travail. Habituellement, le problème est que le système ne reconnaît pas la commande python. Et ce problème est résolu en l'ajoutant à PATH.
Passons au code lui-même:
Nous importons les modules nécessaires:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType
Ensuite, le code:
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
La fonction write_msg reçoit l'ID utilisateur VK <user_id>, auquel elle enverra le message et le message lui-même.
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
Se connecter en tant que communauté et configurer Longpool:
Dans ce document, nous vérifierons cycliquement les événements. Et nous pouvons obtenir le type d'événement avec event.type.
Après cela, après avoir reçu un message de l'utilisateur, nous pourrons lui envoyer une lettre correspondante en utilisant la fonction déjà créée write_msg.
Nous avons donc créé un bot très simple dans VK avec la même implémentation simple. Et la logique du bot peut être programmée comme vous le souhaitez.
Liste des codes GHCommençons maintenant avec une programmation plus réelle.
Créez une classe VkBot dans le fichier vk_bot.py, qui nous servira de bot.
class VkBot: def __init__(self, user_id): print(" !") self._USER_ID = user_id self._USERNAME = self._get_user_name_from_vk_id(user_id) self._COMMANDS = ["", "", "", ""]
Et ajoutez-y une méthode avec laquelle vous pouvez obtenir le nom d'utilisateur via vk id.
def _get_user_name_from_vk_id(self, user_id): request = requests.get("https://vk.com/id"+str(user_id)) bs = bs4.BeautifulSoup(request.text, "html.parser") user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) return user_name.split()[0]
Cela se fait en utilisant beatifulsoup4.
Installez si ce n'est pas le cas:
python -m pip install bs4
Il y a suffisamment d'articles à ce sujet qui méritent d'être étudiés. En l'utilisant, nous allons créer quelques méthodes supplémentaires:
Modifiez le paramètre _get_weather à la ville souhaitée, plus tard cette méthode peut être appelée avec la ville, et par défaut, ce sera votre valeur spécifiée.
En utilisant ces méthodes, nous pouvons obtenir l'heure et la météo. Ces méthodes sont issues de mon projet de bot principal. Vous devez les organiser dans des packages et des classes séparés, en utilisant l'héritage. Mais pour un exemple de travail, j'ai décidé de ranger tout cela dans une seule classe de bots, ce qui est certainement mauvais.
Nous créons la méthode principale new_message, qui traitera le message de l'utilisateur et retournera une réponse:
def new_message(self, message):
Revenons maintenant au fichier exécutable:
Importez la classe de notre bot:
from vk_bot import VkBot
Changeons notre boucle principale:
print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: print('New message:') print(f'For me by: {event.user_id}', end='') bot = VkBot(event.user_id) write_msg(event.user_id, bot.new_message(event.text)) print('Text: ', event.text)
Autrement dit, nous allons maintenant transmettre le message reçu à l'objet bot, qui nous renverra la réponse souhaitée.
Cette complication du programme est tout simplement nécessaire si vous souhaitez améliorer encore les fonctionnalités du bot:
Créez des packages et des classes séparés pour chaque fonction _get_time et _get_weather. Organisez l'héritage de la classe générale. Et définissez chaque nouvelle fonction dans des classes distinctes, il est également préférable de les diviser en packages.
Ajoutez un dictionnaire avec une clé d'ID utilisateur et une valeur d'objet bot. Ainsi, il n'est pas nécessaire de créer un objet bot à chaque fois dans un cycle. De plus, cela garantira l'utilisation de plusieurs utilisateurs à la fois dans des conceptions complexes.
Ainsi, en choisissant une bonne architecture de code, vous pouvez créer un bot multifonctionnel.
Par exemple, j'ai appris à mon robot à jouer de la musique sur un ordinateur, à ouvrir des sites tout en étant assis au téléphone. Envoyez des recettes pour le petit déjeuner, le déjeuner et le dîner.
Vous pouvez éditer le bot par vous-même.
Bot de l'articleProjet de robot principal (avancé) sur GHJe serai heureux de vos idées. Pour toute question, écrivez.