Der Rennwert ist ein wichtiger Faktor bei der Bestimmung des Status in Pokemon. Wenn Sie Pokemon spielen, können Sie möglicherweise kein anständiges Spiel spielen, es sei denn, Sie kennen den Rennwert. Wenn Sie den Rassenwert von Pokemon nicht kennen, müssen Sie derzeit nacheinander nach Google suchen, was ich als problematisch empfand. Also begann ich zu denken, dass es praktisch wäre, einen Chat-Bot zu haben, der mir interaktiv den Rennwert mitteilt.
Es gibt drei Hauptzwecke.
Zu den Teilen und Kenntnissen, die für die Entwicklung verwendet werden können, gehören insbesondere "Pokemon Race Value Database" und "Common Pokemon Name Mistakes". (Ich möchte den richtigen Pokemon-Namen korrigieren, indem ich weiß, wie man einen Fehler in einem allgemeinen Pokemon-Namen macht.)
[Pokemon Name] Bilderbuch
Wenn Sie auf den Chat klicken, wird der Rennwert von Pokemon angezeigt.
Vorerst habe ich es nur auf dem von mir ausgeführten Discord-Server installiert.
Einführung des Discord-Servers "Gatserver" für Pokemon Gachi
Ungefähr 200 Personen nahmen teil, darunter mehrere Personen, die den ersten Platz in der Saison erlebt haben.
[github](https://github.com/ryoYAMAZAKI11/Pokemonbot )
【lokal】 MacOS Catalina Ver. 10.15.4 Python Ver. 3.7.7 【Server】 Ich habe den Bot auf xserver resident gemacht, indem ich das Verfahren auf der folgenden Site befolgt habe. https://ogapsan.com/archives/1077
Als ich es mit Discord Bot nachgeschlagen habe, schien Python Spaß zu machen. Im Voraus habe ich die Rennwertdaten von Pokemon in einer JSON-Datei als Datenbank gespeichert und in Python "die Rennwertdaten herausnehmen und auf den Dicord-Bot reagieren lassen".
Erstellt unter Bezugnahme auf Nationales Bilderbuch zur gründlichen Erfassung von Pokemon.
Teil der Datenbank
{
...
"Menschliche Eidechse":{"No":"4","Pokemon Name":"Menschliche Eidechse","HP":"39","Attacke":"52","Verteidigung":"43","Spezialangriff":"60","Sonderverteidigung":"50","Beweglichkeit":"65","gesamt":"309"},
"Eidechse":{"No":"5","Pokemon Name":"Eidechse","HP":"58","Attacke":"64","Verteidigung":"58","Spezialangriff":"80","Sonderverteidigung":"65","Beweglichkeit":"80","gesamt":"405"},
"Eidechse":{"No":"6","Pokemon Name":"Eidechse","HP":"78","Attacke":"84","Verteidigung":"78","Spezialangriff":"109","Sonderverteidigung":"85","Beweglichkeit":"100","gesamt":"534"},
...
}
https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f Ich habe discord.py aus dem Erwerb des Bot-Tokens mit Bezug auf installiert.
Der Quellcode ist unten
main.py
import sys
import discord
import json
from collections import OrderedDict
import pprint
import re
import bot_token
client = discord.Client()
@client.event
async def on_ready():
print('Logged in as', file=sys.stderr)
print(client.user.name, file=sys.stderr)
print(client.user.id, file=sys.stderr)
print('------', file=sys.stderr)
@client.event
async def on_message(message):
#Ich möchte nicht reagieren, wenn der Absender ein Bot ist
if message.author.bot:
return
#Finden Sie heraus, ob es mit "Bilderbuch" beginnt
if message.content == 'Zakoyamas Bilderbuch':
message_send = "Lotto, der Schöpfer dieses Bots!" + "\n" + "Lotto, um uns auf Twitter bei Problemen zu kontaktieren!"+ "\n" + "https://twitter.com/zakoyama_com"
elif re.match('.+Bilderbuch$', message.content):
json_open = open('pokedex_zen.json', 'r')
json_load = json.load(json_open)
#Erhalten des Pokemon-Namens aus der Nachricht (entfernen Sie den Teil "Bilderbuch")
m = message.content[0:len(message.content)-3]
#Senden Sie eine Nachricht an den Kanal, an den die Nachricht gesendet wurde
if m in json_load:
message_send = "```"
for key, value in json_load[m].items():
if key == 'No':
message_send = message_send + '%s.%s'%(key, value) + ' '
elif key == 'Pokemon name':
message_send = message_send + '% s'% (Wert) + "\ n" + 'HP Angriffsabwehr Spezialangriff Spezialabwehr Spezialabwehr Quick Total \ n'
elif key == 'HP' :
message_send = message_send + '%3d'%(int(value))
else:
message_send = message_send + '%4d'%(int(value))
message_send = message_send + "```"
print('0 ' + m)#Aufzeichnen
else:
message_send = "Lotto, wo kein Pokemon gefunden werden kann!"
print('1 ' + m)#Aufzeichnen
await message.channel.send(message_send)
client.run(bot_token.TOKEN)
bot_token.py
TOKEN = "Hier erhaltene Token"
Die meisten Benutzer sind Japaner und tippen von ihrem Smartphone aus. Daher sind Befehle wie "! P", die in Discord-Bots üblich sind, nicht gut. Ich dachte. Daher antwortet der Bot mit dem Bilderbuch "[Pokemon name]", das auch von einem Smartphone aus leicht einzugeben ist.
main.Auszug aus py
elif re.match('.+Bilderbuch$', message.content):
Auf diese Weise wird es mit dem regulären Ausdrucksmodul `` `re``` extrahiert.
main.Auszug aus py
#Erhalten des Pokemon-Namens aus der Nachricht (entfernen Sie den Teil "Bilderbuch")
m = message.content[0:len(message.content)-3]
Auf diese Weise wurde der Pokemon-Name in der Variablen `` `m``` gespeichert, indem der dreistellige Teil" Bilderbuch "vom Ende entfernt wurde.
In Discord unterscheidet sich die Zeichenbreite von Alphabeten und Leerzeichen je nach Typ. Wenn Sie sie nur anordnen, entsteht eine große Abweichung wie diese. Also habe ich den Discord-Codeblock verwendet. ""```Wenn Sie es in "einschließen, wird es zu einem Codeblock. Die Größe des Alphabets und der Raum mit halber Breite sind einheitlich, und die japanische Zeichengröße ist ebenfalls kleiner, wodurch die Anzeige erleichtert wird. Die Größe von Japanern und Alphabeten in voller Breite sowie Leerzeichen in halber Breite beträgt jedoch 2:Da es nicht 1 ist, scheint es sich ein wenig zu verschieben, wenn versucht wird, es ins Japanische zu übersetzen. Es wird wie folgt im Quellcode implementiert.
main.Auszug aus py
#Senden Sie eine Nachricht an den Kanal, an den die Nachricht gesendet wurde
if m in json_load:
message_send = "```"#Starten Sie hier den Codeblock
for key, value in json_load[m].items():
if key == 'No':
message_send = message_send + '%s.%s'%(key, value) + ' '
elif key == 'Pokemon Name':
message_send = message_send + '%s'%(value) + " \n" + 'HP Attack Defense Spezialangriff Spezialverteidigung Quick Total\n'
elif key == 'HP' :
message_send = message_send + '%3d'%(int(value))
else:
message_send = message_send + '%4d'%(int(value))
message_send = message_send + "` `` "# Schließen Sie hier den Codeblock
###Punkt 3: Protokoll ist Standardausgabe Wenn es wahr ist, wollte ich ein Protokoll aufzeichnen und es wie "Pokemon-Ranking, das häufig durchsucht wird" erstellen, aber ich habe nicht das Gefühl, dass ich es sofort erstellen kann, und der Zweck der Protokollierung ist "Ich möchte wissen, wie man einen Fehler in einem allgemeinen Pokemon-Namen macht". Aus diesem Grund habe ich beschlossen, die Standardausgabe durch Spucken eines Protokolls aufzuzeichnen. Es wird mit der Druckfunktion wie folgt ausgespuckt.
main.Auszug aus py
print ('0' + m) # Zum Protokollieren
...
print ('1' + m) # Zum Protokollieren
Wenn Pokemon gefunden wird0
, Wenn nicht gefunden1
Sie können "häufige Fehler in Pokemon-Namen" überprüfen. (Wenn Sie eine Textverarbeitung durchführen, können Sie auch das Pokemon kennen, das häufig durchsucht wird.)
Teil des Protokolls
0 Rotom erhitzen
0 Galados
0 Chiracino
0 Yukimenoko
1 Arora Kyukon
0 Kyukon
0 Dornenkuss
Führen Sie den folgenden Befehl aus, wenn Sie ihn auf dem Server ausführen, um dieses Protokoll zu erstellen.
nohup python3 main.py 1>> out.log 2> /dev/null &
mit diesemout.log
Ist protokolliert.
#Zielerreichung
Ich habe diesen Bot für ungefähr 2 Monate eingeführt. Überprüfen Sie das Leistungsniveau für jedes der drei Ziele.
-Reduzierter Suchaufwand -Discord Server Aktivierung -Erwerben Sie Teile und Wissen, die für die zukünftige Entwicklung verwendet werden können
###Reduzierter Suchaufwand Es ist ziemlich einfach. Sie müssen nicht nach Google suchen, es ist also einfach. Da der Rennwert allein jedoch nicht als Information ausreicht und ich die Technik und die Eigenschaften kennen möchte, kann es sein, dass ich am Ende eine Google-Suche durchführe. Dies ist eine zukünftige Ausgabe.
###Discord Server Aktivierung Zu Beginn der Einführung von Bot betrug die Teilnehmerzahl etwa 20, überschritt jedoch 200. Es ist ziemlich aktiv geworden. Es wird angenommen, dass einer der Gründe dafür ist, dass die Tweets, die gerade erstellt werden, ziemlich viel RT erhalten haben. Erweiterte Tweets
###Erwerben Sie Teile und Wissen, die für die zukünftige Entwicklung verwendet werden können Ich konnte eine Liste der Pokemon-Rennwerte erstellen.
Als ich das Protokoll überprüfte und kein Pokemon fand, war es mit 80% weniger Material gefüllt und nutzlos. Wahrscheinlich der AuslöserBilderbuch von
weil〜
Es scheint, dass es Leute gibt, die mit obszönen Worten in der Rolle von spielen.
#Zusammenfassung Es wurde in einer Woche erstellt und während der Einführung für etwa zwei Monate angepasst. Ich habe etwas mit einer anständigen Funktion gemacht, aber ehrlich gesagt funktioniert es nicht sehr gut (ungefähr einmal am Tag). Ich werde es auf jeden Fall weiter verbessern.
Was mich beeindruckt hat, war, dass als der Tweet RT war, viele Leute sagten, dass sie ihn verwenden wollten, aber nur wenige ihn tatsächlich verwendeten. Ich erkannte sehr genau, dass die Bedürfnisse, die die Leute sagen, und die wahren Bedürfnisse, die tatsächlich benötigt werden, unterschiedlich sein können.