「Smeshariki」のコミュニティ管理者
, — .
前書き
約3か月前、VKontakteネットワークの友達が一般的なチャット(会話)で推測ゲームをプレイしました。これは、私たちみんなが大好きな漫画「Smeshariki」をベースにしたゲームです。ルール:ホストは漫画のキャラクターの引用を書き、プレーヤーはこの引用がどのシリーズからのものかを推測します。私はゲームをもっと面白くして、それを主要なボットの役割に割り当てることにしました。
グループ作成
ボットのグループまたはコミュニティを作成するには、VKontakteの[コミュニティ]セクションに移動し、右上隅にある[コミュニティの作成]ボタンをクリックする必要があります。
コミュニティの種類「インタレストグループ」を選択します。
名前を考え出し、トピックを選択し、グループのタイプを開いたままにします。
次に、IDを見つけて、グループトークンを作成する必要があります。
アドレスバーの「クラブ」の後にIDが表示されている場合は、トークンについて少し心配する必要があります。
グループ管理に移動
します。「APIの操作」セクションを選択し、そこでボットが機能するように「LongPollAPI」を有効にします。
次に、[アクセスキー]に移動し、次の設定でアクセスキーを作成します
。結果のアクセスキーはトークンです。
残っているのは、グループを会話に追加できるようにすることだけです。
「メッセージ->ボットの設定」セクションに移動し、「ボット機能」をオンにして、「会話へのコミュニティの追加を許可する」をクリックします。保存します。
vk_apiモジュールのインストール
Vkontakte APIを操作するためのモジュールをインストールするには、コマンドラインに次のコマンドを記述する必要があります。
pip3 install vk_api
また、botディレクトリにファイル「points.pickle」を作成する必要があります。
基本機能
ソフトウェアの部分に移り
ます。必要なプラグイン(pickle、random、requests、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」という単語と等しい場合、ボットは推測する必要のある見積もりで応答します(これはすべて「ifisinstance」をチェックした後)。
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コミュニティ「Abodeof Quests | Smeshariki」で見ることができます。
ちなみに、彼はチャットだけでなく、プライベートメッセージでも働いています。
また、ここでは取り上げていないことがいくつかあります。