Dies ist der erste Beitrag. Dieses Mal musste ich jeden Tag in der Schule meine Körpertemperatur in Google Forms eingeben, was ärgerlich war ... Nein, ich habe keine Zeit, es einzugeben, also habe ich ein Programm erstellt, das es jeden Tag zufällig zwischen 6:00 und 8:30 Uhr sendet und auch die Körpertemperatur zwischen 36,4 und 36,6 sendet. Es war.
Ich habe es unter Bezugnahme auf den Artikel hier gemacht. Außerdem werde ich diesmal auf die Erfassung der Identifikationsnummer der Google Form-Frage verzichten.
Geben Sie in "form_url" die URL des übermittelten Formulars und in "entry" die Identifikationsnummer der erhaltenen Frage ein. Erhöhen Sie es wie "ans_7" entsprechend der Anzahl der Fragen. Schreiben Sie in "Ausgabe" die Antwort auf die Frage. Die Werte von "ans_1" und "ans_4" ändern sich jeden Tag. Geben Sie daher die entsprechenden Werte ein. Hier wird "Keine" entsprechend eingegeben.
cfg.json
{
"form_url": "https://docs.google.com/forms/d/e/1FAIpQLSc93lIQ3Aob93cwjx6HSRbuC8V7NT59UfUPhlw6AlkGtZ6CXQ/",
"entry": {
"ans_1": 964244932,
"ans_2": 888214820,
"ans_3": 23055831,
"ans_4": 10832147,
"ans_5": 1720496078,
"ans_6": 2017707777
},
"output":{
"ans_1": "None",
"ans_2": "2A",
"ans_3": "8",
"ans_4": "None",
"ans_5": "es geht mir gut",
"ans_6": "Nicht in"
}
}
Das Erstellen einer JSON-Datei sieht folgendermaßen aus.
Dieses Mal senden wir in Zusammenarbeit mit Discord Protokolle, z. B. ob sie ordnungsgemäß an einen bestimmten Discord-Kanal gesendet wurden. Das abgeschlossene Programm sieht so aus.
bot.py
# -*- coding: utf-8 -*-
import discord
from discord import Embed
from discord.ext import tasks
from datetime import datetime
import os
import requests
import random
import json
TOKEN = os.environ["TOKEN"]
client = discord.Client(intents=discord.Intents.all())
#Die nächste geplante Übertragungszeit ist 06:00-8:Nach dem Zufallsprinzip auf 30 einstellen
def setting_time_set():
setting_time_h = random.randint(6, 8)
if setting_time_h == 8:
setting_time_m = random.randint(0, 30)
else:
setting_time_m = random.randint(0, 59)
setting_time = f"{setting_time_h:02}:{setting_time_m:02}"
return setting_time
def set_tem():
choice_list = ["36.4", "36.5", "36.6"]
choice_ans = random.choice(choice_list) # 36.4-36.Wählen Sie nach dem Zufallsprinzip bis zu 6 aus
return choice_ans
time_set = setting_time_set() #Stellen Sie die erste nächste Übertragungszeit beim Start ein
tem_set = set_tem()
#Funktion einbetten
async def template_embed(message, title, name_1, name_2, value_1, color, description=None):
ch = client.get_channel(message)
embed_time = datetime.now().strftime("%Y Jahr%m Monat%d Tag-%H:%M")
embed = Embed(title=title, description=description, color=color)
embed.add_field(name=name_1, value=f"{value_1}", inline=True)
embed.add_field(name=name_2, value=f"{tem_set}", inline=True)
embed.set_footer(text=f"{embed_time}")
await ch.send("<@Benutzeridentifikation>")
await ch.send(embed=embed)
@client.event
async def on_ready():
await template_embed(message=768274673984208926, title="Startprotokoll", name_1="Nächste geplante Übertragungszeit", value_1=time_set,
name_2="Körpertemperatur gesendet werden", color=discord.Color.orange())
@client.event
async def on_message(message):
if message.content == "/reset":
await reset(message)
if message.content == "/now":
await now(message)
async def reset(message):
global time_set
global tem_set
time_set = setting_time_set()
tem_set = set_tem()
await template_embed(message=768274673984208926, title="Zurücksetzen", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.purple())
await template_embed(message=message.channel.id, title="Zurücksetzen", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.purple())
async def now(message):
await template_embed(message=message.channel.id, title="momentane Situation", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.greyple())
@tasks.loop(seconds=60)
async def loop():
global time_set
global tem_set
now_t = datetime.now().strftime('%H:%M')
print(f"Aktuelle Uhrzeit:{now_t}/ Geplante Übertragungszeit:{time_set}/ Geplante Getriebekörpertemperatur:{tem_set}")
if now_t == time_set: #Ist es die geplante Übertragungszeit?
dt_now = datetime.now().strftime("%Y-%m-%d") #Aktuelle Zeit 2020-01-Erhalten in Form von 01, dt_Jetzt speichern
file_name = "cfg.json"
with open(file_name, "r", encoding="utf-8")as f:
cfg = json.load(f)
cfg["output"]["ans_1"] = f"{dt_now}"
cfg["output"]["ans_4"] = f"{tem_set}"
params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}
res = requests.get(cfg["form_url"] + "formResponse", params=params)
if res.status_code == 200:
await template_embed(message=768274673984208926, title="Protokollinformationen", description=f"[URL]({res.url})",
name_1="Abschlussstatus", name_2="Übertragene Körpertemperatur", value_1="Erfolgreich", color=discord.Color.green())
else:
res.raise_for_status()
await template_embed(message=768274673984208926, title="Protokollinformationen", name_1="Abschlussstatus", name_2="Körpertemperatur gesendet werden",
value_1="Ein Fehler ist aufgetreten.", color=discord.Color.red())
else:
if now_t == "21:00":
time_set = setting_time_set()
tem_set = set_tem()
await template_embed(message=768274673984208926, title="Benachrichtigung über die Aktualisierung der Übertragungszeit", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.blue())
loop.start()
client.run(TOKEN)
Ich werde Schritt für Schritt erklären. Zunächst wird in Bezug auf diesen Teil die Übertragungszeit zufällig zwischen 6:00 und 8:30 ausgegeben und auf "Einstellungszeit" zurückgesetzt, und dann wird die Körpertemperatur zufällig ausgewählt und auf "Auswahl_ans" zurückgesetzt. Im folgenden Prozess werden die Übertragungszeit und die Körpertemperatur beim ersten Start eingestellt. Darüber hinaus ist die Verarbeitung darunter die Generierungsverarbeitung von Embed.
#Die nächste geplante Übertragungszeit ist 06:00-8:Nach dem Zufallsprinzip auf 30 einstellen
def setting_time_set():
setting_time_h = random.randint(6, 8)
if setting_time_h == 8:
setting_time_m = random.randint(0, 30)
else:
setting_time_m = random.randint(0, 59)
setting_time = f"{setting_time_h:02}:{setting_time_m:02}"
return setting_time
def set_tem():
choice_list = ["36.4", "36.5", "36.6"]
choice_ans = random.choice(choice_list) # 36.4-36.Wählen Sie nach dem Zufallsprinzip bis zu 6 aus
return choice_ans
time_set = setting_time_set() #Stellen Sie die erste nächste Übertragungszeit beim Start ein
tem_set = set_tem()
#Funktion einbetten
async def template_embed(message, title, name_1, name_2, value_1, color, description=None):
ch = client.get_channel(message)
embed_time = datetime.now().strftime("%Y Jahr%m Monat%d Tag-%H:%M")
embed = Embed(title=title, description=description, color=color)
embed.add_field(name=name_1, value=f"{value_1}", inline=True)
embed.add_field(name=name_2, value=f"{tem_set}", inline=True)
embed.set_footer(text=f"{embed_time}")
await ch.send("<@Benutzeridentifikation>")
await ch.send(embed=embed)
Ich werde die Hauptverarbeitung erklären.
@client.event
async def on_ready():
await template_embed(message=768274673984208926, title="Startprotokoll", name_1="Nächste geplante Übertragungszeit", value_1=time_set,
name_2="Körpertemperatur gesendet werden", color=discord.Color.orange())
Beim Start wird das Startprotokoll an einen bestimmten Kanal gesendet.
@client.event
async def on_message(message):
if message.content == "/reset":
await reset(message)
if message.content == "/now":
await now(message)
async def reset(message):
global time_set
global tem_set
time_set = setting_time_set()
tem_set = set_tem()
await template_embed(message=768274673984208926, title="Zurücksetzen", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.purple())
await template_embed(message=message.channel.id, title="Zurücksetzen", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.purple())
async def now(message):
await template_embed(message=message.channel.id, title="momentane Situation", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.greyple())
Hier die Verarbeitung des Rücksetzbefehls, mit dem die Übertragungszeit und die Körpertemperatur zurückgesetzt werden können, und der Befehl, mit dem der aktuelle Status überprüft werden kann.
@tasks.loop(seconds=60)
async def loop():
global time_set
global tem_set
now_t = datetime.now().strftime('%H:%M') #Holen Sie sich die aktuelle Zeit
print(f"Aktuelle Uhrzeit:{now_t}/ Geplante Übertragungszeit:{time_set}/ Geplante Getriebekörpertemperatur:{tem_set}")
if now_t == time_set: #Ist es die geplante Übertragungszeit?
dt_now = datetime.now().strftime("%Y-%m-%d") #Aktuelle Zeit 2020-01-Erhalten in Form von 01, dt_Jetzt speichern
file_name = "cfg.json"
with open(file_name, "r", encoding="utf-8")as f:
cfg = json.load(f)
cfg["output"]["ans_1"] = f"{dt_now}" #Ans heutiges Jahr, Monat, Tag_Überschreiben 1
cfg["output"]["ans_4"] = f"{tem_set}" #Körpertemperatur ans_Überschreiben 4
params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}
res = requests.get(cfg["form_url"] + "formResponse", params=params)
if res.status_code == 200: #Bei normalem Versand
await template_embed(message=768274673984208926, title="Protokollinformationen", description=f"[URL]({res.url})",
name_1="Abschlussstatus", name_2="Übertragene Körpertemperatur", value_1="Erfolgreich", color=discord.Color.green())
else: #Wenn Sie nicht senden könnten
res.raise_for_status()
await template_embed(message=768274673984208926, title="Protokollinformationen", name_1="Abschlussstatus", name_2="Körpertemperatur gesendet werden",
value_1="Ein Fehler ist aufgetreten.", color=discord.Color.red())
else:
if now_t == "21:00":
time_set = setting_time_set()
tem_set = set_tem()
await template_embed(message=768274673984208926, title="Benachrichtigung über die Aktualisierung der Übertragungszeit", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
value_1=time_set, color=discord.Color.blue())
Hier wird "task.loop ()" verwendet, um die aktuelle Zeit und die geplante Übertragungszeit in Intervallen von 60 Sekunden zu überprüfen, und wenn sie übereinstimmen, wird die Übertragungsverarbeitung durchgeführt. Wenn sie nicht übereinstimmen, werden die aktuelle Zeit und die Rücksetzzeit überprüft, um festzustellen, ob sie übereinstimmen. Wenn es sich um die Rücksetzzeit handelt, wird die Rücksetzverarbeitung durchgeführt.
Bitte beachten Sie, dass es ein ziemliches Durcheinander ist, da es der erste Beitrag ist. Der vollständige Code wird auf Github veröffentlicht. Sie können ihn also gerne verwenden. Gegen Ende habe ich die Erklärung erheblich weggelassen, aber ich hoffe, dass sie hilfreich sein wird.
Gewinnen Sie einen verdammten Fragebogen mit Google Form Auto-Answer Bot (Python3)
Recommended Posts