チャンネルメンバーから抽選するSlackBotを作成した話
該当のチャンネルに対して「@メンバー抽選」の文言を投稿することで、チャンネルにJoinしているメンバーの中からランダムに2名を抽出するBotをPythonで作成しました。
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import random
SLACK_BOT_TOKEN = "xoxb-XXXXX"
SLACK_APP_TOKEN = "xapp-XXXXX"
app = App(token=SLACK_BOT_TOKEN)
# メンバーをランダムに選ぶ関数
def get_random_members(channel_id, n):
try:
# メンバーリストを取得
response = app.client.conversations_members(channel=channel_id)
if response["ok"]:
# メンバーIDのリストを取得
members = response["members"]
print(members)
# n個のランダムなメンバーを選択
random_member_ids = random.sample(members, n)
names = []
for member_id in random_member_ids:
member_info = app.client.users_info(user=member_id)
if member_info["ok"]:
print(member_info)
name = member_info["user"]["real_name"]
names.append(name)
return names
else:
print("Error:", response["error"])
return []
except Exception as e:
print("Error:", e)
return []
@app.message("@メンバー抽選")
def choose_members(message, say):
# チャンネルIDを取得
channel_id = message["channel"]
# チャンネルからランダムにメンバーを選ぶ(ここでは2名)
num_members_to_select = 2
random_members = get_random_members(channel_id, num_members_to_select)
# 選ばれたメンバーの表示
selected_members = ", ".join(random_members)
message_text = f"ランダムに選ばれたメンバー: {selected_members}"
# メッセージを返信
say(message_text)
if __name__ == "__main__":
SocketModeHandler(app, SLACK_APP_TOKEN).start()