“ Smeshariki”的社区管理员
, — .
介绍
大约三个月前,我在VKontakte网络上的朋友通过一般聊天(对话)玩了一个猜谜游戏-一种基于我们大家都喜欢的卡通“ Smeshariki”的游戏。规则:主持人写卡通人物的引号,玩家猜测该引号来自哪个系列。我决定让游戏变得更有趣,并将其分配给领先机器人的角色。
组创建
为了为我们的机器人创建一个组或社区,您需要转到VKontakte中的“社区”部分,然后单击右上角的“创建社区”按钮。
我们选择社区“兴趣小组”的类型。
提出一个名字,选择一个主题,保持组类型为开放状态。
现在,我们需要找出ID并创建一个组令牌。
如果可以在地址栏中的“ club”一词之后找到ID,则您需要担心令牌。
转到组管理:
选择“使用API”部分,然后在其中启用“长轮询API”,以使漫游器能够正常工作。
接下来,转到“访问密钥”,使用以下设置创建访问密钥:
生成的访问密钥是我们的令牌:
剩下的唯一事情就是允许将群组添加到对话中。
转到“消息->机器人的设置”部分,打开“机器人功能”,然后单击“允许向对话添加社区”。我们保存。
安装vk_api模块
为了安装用于Vkontakte API的模块,您需要在命令行中编写以下命令:
pip3 install vk_api
您还需要在bot目录中创建一个文件“ points.pickle”。
基本功能
进入软件部分:我们
连接了必要的插件:pickle,random,请求和vk_api库,借助这些插件,您可以与VKontakte一起使用。
import random
import pickle
import requests
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
# BotLongpoll - .
我们创建带有引号和字典的字典来存储信息:
series = {"":[" 1", " 2"], "":[" 1", " 2"]}
series_in_chats = {}
quotes_in_chats = {}
points = {}
引号本身包含在“系列”字典键的列表中,因此每个系列有许多引号。
需要变量“ series_in_chats”在单独的对话中存储有关系列的信息,变量“ quotes_in_chats”类似,仅用于存储有关报价的信息。
现在我们连接到该组:
vk_session = vk_api.VkApi(token=" ") # ID
longpoll = VkBotLongPoll(vk_session, "ID ") #
vk = vk_session.get_api()
您可以创建一个函数来更方便地发送消息:
def send(ch_id, msg):
vk.messages.send(chat_id=ch_id, random_id=random.randint(1, 9999999), message=msg)
参数:
ch_id # ID ,
msg #
vk.messages.send(chat_id, random_id, message)
发送消息的方法。
必填参数:
chat_id - ID , ,
random_id - , ,
message - .
在此处阅读有关该方法的更多信息。
处理消息
while True: #
try:
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat:
chat_id = int(event.chat_id) #ID ,
text = event.object.text.lower() #
man = event.obj.from_id #ID ,
if chat_id not in series_in_chats:
episode = random.choice(series.keys()) #
#
quote = random.choice(series.get(episode)) #
#
series_in_chats.update({chat_id:episode}) #
quotes_in_chats.update({chat_id:quote}) #
# ,
# .
except:
continue
# try except - -
# ,
现在,我们可以处理该组收到的消息,代表该组发送消息等等。
介绍眼镜
检查“如果chat_id不在series_in_chats中”后,需要插入以下代码:
if points == {}:
with open('points.pickle', 'wb') as f:
pickle.dump(points, f)
with open('points.pickle', 'rb') as f:
points = pickle.load(f)
if isinstance(points.get(man), int) == False:
points.update({man:0})
with open('data.pickle', 'wb') as f:
pickle.dump(points, f)
# points
#
猜测
我们进行检查:如果对话中收到的消息等于“ guess”一词,则该漫游器将以需要猜测的报价作为响应(检查“ if isinstance”后所有这些):
if text == "":
send(chat_id, ", : "+ quotes_in_chats.get(chat_id))
剩下的只是检查序列的正确性-如果消息中包含序列的名称,则漫游器将回答该序列已被猜测:
if series_in_chats.get(chat_id) in text:
send(chat_id, " !")
points.update({man:points.get(man)+1}) # 1
with open('points.pickle', 'wb') as f:
pickle.dump(points, f) #
send(chat_id, " !\n : "+str(points.get(man)))
# :
episode = random.choice(series.keys()) #
#
quote = random.choice(series.get(episode)) #
#
series_in_chats.update({chat_id:episode}) #
quotes_in_chats.update({chat_id:quote}) #
结论
结果,该机器人将像这样工作:
当然,在此基础上,您几乎可以创建任何机器人-不仅仅是猜测。
可以在VKontakte社区“ Abode of Quests | Smeshariki ”中看到创建的机器人。
顺便说一句,他不仅在聊天中工作,而且还在私人消息中工作。
它也有一些我没有在这里讨论的东西。