diff --git a/archive/README_OLD.md b/archive/README_OLD.md new file mode 100644 index 0000000..543bc87 --- /dev/null +++ b/archive/README_OLD.md @@ -0,0 +1,188 @@ +# Discord-Backup-Bot +ソースコードの2次配布、販売はお控えください +### ~~⚠️このBotは1サーバー / 1Botを想定してコーディングされています⚠️~~ +↑今は複数のサーバーに対応させたモデルか1サーバーだけのモデルか選べるので関係ないです +### 宣伝 +もしBot/ソースコードを気に入っていただけたら僕のサーバーで寄付(PayPay)してくれると非常に励みになります!! +Botが対応するので24時間いつでもだいじょうぶです! +このリポジトリにスターをつけてくれるのも超うれしいです!! +↓サーバー↓ (僕やこのソース/Botを使う方とのコンタクトもここです) +https://discord.gg/aSyaAK7Ktm +## Botについて +ソースを公開していますがコーディング、ホスティングの過程を省きたい場合は僕がすでにデプロイしているものを使ってみてください +↓バックアップBot↓ +https://discord.com/api/oauth2/authorize?client_id=1152222169154199552&permissions=8&scope=bot +↓メンバーブーストBot↓ +https://discord.com/api/oauth2/authorize?client_id=1178210441307115550&permissions=8&scope=bot +### BotのHTMLは [Ame-x](https://github.com/EdamAme-x) さんが作成してくれました!! +しかも無償で。Thankyou very much!!! +## 2023/12/15:OAuth2トークンの有効期限について +### メンバーブーストに使っているトークンですが、どうやら1週間で期限が切れるみたいです +対策としては403が返されたときにリフレッシュトークンを使ってアクセストークンを再発行することです +```python +API_ENDPOINT = 'https://discord.com/api/v10' +CLIENT_ID = ['アプリケーションID'] +CLIENT_SECRET = ['アプリケーションシークレット'] +REDIRECT_URI = "リダイレクト先" +data = { + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET, + 'grant_type': 'refresh_token', + 'refresh_token': 'ここにリフレッシュトークン', + 'redirect_uri': REDIRECT_URI + } + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } +``` +こんな感じでデータとヘッダーを設定したらリクエストする時につけてあげます +```python +requests.post('%s/oauth2/token' % API_ENDPOINT, data=data, headers=headers) +``` +こんな感じでくっついてきます +``` +{'token_type': 'Bearer', 'access_token': 't7KOqezBkvQbBCiKyRG3aW4GfwJD4Q', 'expires_in': 604800, + 'refresh_token': 'tnKw3UtwqrernhImzDkEEP4eJwkiQh', 'scope': 'guilds.join identify'} +``` +返り値に新しいアクセストークンと新しいリフレッシュトークンがくっついてきます! +リフレッシュトークンも毎回更新されるようです! +ここのソースコードのお好きなところにくっつけて使ってあげてください! +## 2023/1/13:v4リリース! +変更点は以下の通りです +- 稚拙なコードを改善 + 特にトークンやファイルパスを複数回入力してようなところ + パスはv4pathに記述するようになりました +- /callの追加先サーバーIDを削除 +- /callのデータサーバーIDを"all"と入力すると認証した人全員を追加するように変更 +- サーバーごとに異なるトークンになるのを防ぐため参照元は常にuserdata.jsonになるように変更 + この変更でリフレッシュトークンを使うように改造する難易度が下がりました + +callをたくさん使いたい...?非同期スリープを使ってあげてください.... + +こんな感じです +v3をリリースしたときと今では僕自身の技術力が違いすぎてコードに余計なところが多かったです +## 2023/11/29:v3リリース! +変更点は以下の通りです +- /callコマンド専用のファイルを作り、/callが使われてもBotが停止しなくなりました + このコードだと/callは1回しか使えないです、call中に/callを使うとBotから返信されます + callされているかの判定は同じディレクトリにあるnow.jsonで行っています +- 気持ち程度にstateの引数を暗号化するようにしました + ここでバラしたら元も子もないですが、URLはそれぞれ16進と8進に変えられてninFlaskV3内でintにデコードします + + +now.jsonは相対パスで入力しているので、変更する必要がある場合はコードの編集ソフトかメモ帳かでnow.jsonを検索してください +ベースとなっているのはnin2でnin2 -> ninV2 -> ninV3になっています +通常のnin.pyの機能やninV2aが使いたい方は僕のコードを参考にするなり自分なりに考えるなどで各自編集してください +#### FlaskV3aについて +もともとFlask-Discoed-Extendedでなにか便利な機能があるか探るのも含めてロールの付与はFlaskDEの "Discord.Utilities.add_role" を使ってたんですが、べつにこれ以外の機能は使わなかったしむしろログが増えてじゃまになるだけだったのでやっぱりリクエストする方がスマートだと考え、GitHubのリファレンスモデルにもリクエストで完結するninFlaskV3a (インポートの関係上名前はそのままにフォルダだけ分けました) をアップロードしました +リクエストの方がシンプルなコードでできるのでもう改造してた人もいるかもしれませんがいちおう追記しておきます +## 2023/11/19:429TooManyRequestについて +Replitでホスティングをすると/call時にTooManyRequestが発生するようです +1回のリクエストにクールタイムは2分ほど必要でまともに使えないのでReplitはこのBotのホスティングに適さないです +## 2023/11/17:チェックボタンを押さなくても認証ができるv2をアップロードしました +基本的な動作はなにも変わらないのでボタンを押したい方や興味ない方はv1でOKです +動作させるまでの手順がほんの少しだけ増えたので最後に記載しておきます +## 2023/9/15:サーバーごとに別のファイルに保存するバージョンも作りました +招待は↓から! +https://discord.com/api/oauth2/authorize?client_id=1152222169154199552&permissions=8&scope=bot +ローカルに構築するかた向けに最後の方にそっちのセットアップ方法も書いておきます +## Botのセットアップ +### Pythonを使える環境と脳みそ、ある程度のファイル操作とネットワーク知識、Botアカウントの作成と編集ができることが前提に話が進みます + +以下のPythonモジュールをインストールしておきます +- discord.py +- requests +- flask + +Discord Developer Portalにアクセス +https://discord.com/developers/applications +名前はなんでもいいのでアプリケーションを作成しましょう +作成したらまずOAuth2のGeneralからCLIENT IDとCLIENT SECRETを控えておきます +![1](image/1.png) +その下にあるRedirectsにFlaskサーバーを建てる場所を入力します +Flaskサーバーのデフォルトポートは5000なのでポートには5000と記入しておきます +##### この時末尾に"/"を入れるのを忘れないで! +![2](image/2.png) +そうしたら1つ下にあるURL GeneratorのSCOPESで"identify"と"guilds.join"を選択、 +SELECT REDIRECT URLにはさっき入力したアドレスを選択して認証に必要なURLを作成しましょう +このURLも後で使うので控えておきます +![3](image/3.png) +必要に応じてインテントの設定もしておいてください +もちろんBotなのでBotのトークンもコピーしておいてください +![7](image/7.png) +これでDeveloper Portalから必要になる情報は以上です +いったんDeveloper Portalを離れてローカル環境で編集します +## ローカルでの作業 +リポジトリからnin.pyとninFlask.pyをダウンロードします +このBotはjson形式でユーザー情報を保存するので好きなところに好きな名前でjsonファイルを作ってください +この時作ったjsonファイルには {} とだけ記載しておいて、jsonとしてちゃんと機能するようにしておいてください +- 僕は"userdata.json"という名前で作成しました + +そうしたらエディターかメモ帳かでnin.pyとninFlask.pyを開きます +- 僕はVisual Studio Codeを使いました + +nin.pyとninFlask.py両方に記入欄があるので、記入欄に書いてある情報を入力していきます +上に貼り付けた僕の環境では下の画像のようになりました +###### nin.py +![4](image/4.png) +###### ninFlask.py +![6](image/6.png) +![5](image/5.png) +これで2つとも保存すれば編集はおしまいです!おつかれさまでした! +nin.pyを実行すればBotが稼働します! +Botをサーバーに参加させて動作確認してみてください! +### サーバーに接続できない、500が返される +- ちゃんとポートが開放されているかチェックしてください +- 自分のグローバルIPに自分のグローバルIPから接続することはできません、ローカルで動作チェックをするならローカルIPを使ってください +### /callや/request1をしてもユーザーの追加に失敗する +- Botが参加していないサーバーには参加させることができません +- 追加しようとしたあいてがアプリケーション認証を切っていると追加できません + 対策もありません、もういっかい認証してもらうしかないです +### ロール付与に失敗する +- Botにそのロールを付与する権限があるか確認してください + また、付与できる状態かどうかも確認してください +## Botコマンド +- button + 登録リンクとロール付与のボタンを表示します + タイトルと説明を省くとテンプレートの文章を送ります +- call + jsonに保存されたユーザー全員を追加します、誤爆には充分気をつけてください +- request1 + 指定したIDのユーザーを追加します + サーバーIDを入力するとBotが参加している別のサーバーにも参加させることができます +- check + 指定したユーザーIDの情報が登録されているか確認します +- datacheck + jsonに何人の情報が登録されているか確認します +- delkey + 指定したユーザーIDの登録情報を削除します +## コンタクト +#### サポートサーバー +https://discord.gg/aSyaAK7Ktm +僕のDiscord -> .taka. +###### 余談ですがこのREADMEを書いてる途中に停電してデータふっとびました、悲しいです +###### わかりにくいとこがあったら指摘していただけるとありがたいです +###### 最近、質問を多数いただいているのですがグローバルIPアドレスやjsonファイルの使い方みたいな初歩的すぎるものは自分で調べてくださいそれでもわからないならBotを作るのは向いてませんあとここの説明文はちゃんと読んでくださいすでに書いてあることを質問するのはやめてくださいおねがいします + +## サーバーごとに別ファイルを作る版、nin2の使い方 +![9](image/9.png) +こんな感じでuserdata.jsonの他にサーバーID.jsonも作ってくれるバージョンです +/callを使うとき、データサーバーIDの欄にIDを入力すると入力したIDのサーバーで登録したひとだけが追加されます +nin.pyとの違いはipath2にサーバーID.jsonが保存される"フォルダーのパス"を入力することくらいです +僕の環境では↓のようになりました +![8](image/8.png) +これだけでuserdata.json(全サーバーごっちゃのデータ)とサーバーID.json(IDのサーバーで登録したひとだけのデータ)の両方が作成され +マルチサーバーに対応させることができるようになりました +ninFlask.pyはそのままでだいじょうぶです + +## チェックボタンを押す必要のなくなったv2の使い方 +Flask Discord Extendedが必要になります +- pip install Flask-Discord-Extended + +FlaskのファイルにもBotのトークンとipath2の入力が必要になりました +![10](image/10.png) +これだけです +バグとかおかしなとこがあれば連絡してくれると非常に助かります!! +##### v2alphaについて +nin(Flask)V2aのファイルはロールIDの受け渡しがjson経由になったものです +機能の変更はありませんがalpha版じゃないものとalpha版は混同して使うことができないので気をつけてください diff --git a/archive/v1/nin.py b/archive/v1/nin.py new file mode 100644 index 0000000..0f1db13 --- /dev/null +++ b/archive/v1/nin.py @@ -0,0 +1,206 @@ +import discord +import json +import requests +from ninFlask import start + +intents = discord.Intents.all() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + +ipath="userdata.json のパスをここに" +BOTTOKEN="Botのトークンをここに" +authurl="作ったURLをここに" + +@client.event +async def on_ready(): + await client.change_presence(activity=discord. Activity(type=discord.ActivityType.watching, name='認証ボタン')) + print(f'Thankyou for running! {client.user}') + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + if タイトル==None: + タイトル="こんにちは!" + if 説明==None: + 説明="リンクボタンから登録した後、✅を押して認証完了" + try: + if interaction.user.guild_permissions.administrator: + ch = interaction.channel + embed = discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue()) + id=ロール.id + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl) + button1=discord.ui.Button(emoji="✅", style=discord.ButtonStyle.primary, custom_id=f"{id}") + view = discord.ui.View() + view.add_item(button) + view.add_item(button1) + await interaction.response.send_message("made by .taka. thankyou for running!!!", ephemeral=True) + try: + await ch.send(embed = embed, view = view) + except: + await ch.send("メッセージの送信に失敗しました") + return + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,サーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + await interaction.response.send_message("登録されたユーザーを追加中です...") + useridj=open(ipath) + userid = json.load(useridj) + if サーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=サーバーid + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + a=0 + b=0 + c=0 + d=0 + e=0 + for key, value in userid.items(): + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + key, headers=head, json={"access_token": value}) + if rea.status_code==201: + a=a+1 + elif rea.status_code==204: + b=b+1 + elif rea.status_code==403: + c=c+1 + elif rea.status_code==429: + e=e+1 + else: + d=d+1 + + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回Too many request\n{d}人は不明なエラーです") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + await interaction.response.send_message(f"該当ユーザーのトークンは:{token}:です\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str,サーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + if サーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=サーバーid + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + ユーザーid, headers=head, json={"access_token": token}) + print(rea.status_code) + if rea.status_code==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif rea.status_code==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif rea.status_code==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def req1(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + del (userid[f"{ユーザーid}"]) + json.dump(userid, open(ipath,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="datacheck", description="登録人数の確認") +async def req1(interaction: discord.Interaction): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + i=len(userid) + await interaction.response.send_message(f"{i}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@client.event +async def on_interaction(interaction:discord.Interaction): + try: + if interaction.data['component_type'] == 2: + await on_button_click(interaction) + except KeyError: + pass + +async def on_button_click(interaction:discord.Interaction): + custom_id = interaction.data["custom_id"] + if int(custom_id) <8: + return + print(custom_id) + useridj=open(ipath) + userid = json.load(useridj) + a=interaction.user.id + if f"{a}" not in userid.keys(): + await interaction.response.send_message("あなたはまだ登録が終わっていません\n```\nTips\n先に「登録リンク」ボタンを押して登録を済ませましょう```", ephemeral=True) + return + try: + await interaction.user.add_roles(interaction.guild.get_role(int(custom_id))) + + except: + await interaction.response.send_message("おや?ロールが存在しないか、ロール付与の権限がありません\nBotの権限やロールの序列を確認してみましょう") + return + await interaction.response.send_message("ナイス!認証完了です!", ephemeral=True) + +start() +client.run(BOTTOKEN) diff --git a/archive/v1/nin2.py b/archive/v1/nin2.py new file mode 100644 index 0000000..21e6f0a --- /dev/null +++ b/archive/v1/nin2.py @@ -0,0 +1,229 @@ +import discord +import json +import requests +from ninFlask import start + +intents = discord.Intents.all() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" +BOTTOKEN="Botのトークンをここに" +authurl="作ったURLをここに" + +@client.event +async def on_ready(): + await client.change_presence(activity=discord. Activity(type=discord.ActivityType.watching, name='認証ボタン')) + print(f'Thankyou for running! {client.user}') + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + if タイトル==None: + タイトル="こんにちは!" + if 説明==None: + 説明="リンクボタンから登録した後、✅を押して認証完了" + try: + if interaction.user.guild_permissions.administrator: + ch = interaction.channel + embed = discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue()) + id=ロール.id + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl) + button1=discord.ui.Button(emoji="✅", style=discord.ButtonStyle.primary, custom_id=f"{id}") + view = discord.ui.View() + view.add_item(button) + view.add_item(button1) + await interaction.response.send_message("↓", ephemeral=True) + try: + await ch.send(embed = embed, view = view) + except: + await ch.send("メッセージの送信に失敗しました") + return + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,追加先のサーバーid:str=None,データサーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + await interaction.response.send_message("登録されたユーザーを追加中です...") + if データサーバーid==None: + useridj=open(ipath) + else: + useridj=open(f"{ipath2}{データサーバーid}.json") + userid = json.load(useridj) + if 追加先のサーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=追加先のサーバーid + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + a=0 + b=0 + c=0 + d=0 + e=0 + for key, value in userid.items(): + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + key, headers=head, json={"access_token": value}) + if rea.status_code==201: + a=a+1 + elif rea.status_code==204: + b=b+1 + elif rea.status_code==403: + c=c+1 + elif rea.status_code==429: + e=e+1 + else: + d=d+1 + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回Too many request\n{d}人は不明なエラーです") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + await interaction.response.send_message(f"該当ユーザーのトークンは:{token}:です\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str,サーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + if サーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=サーバーid + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + ユーザーid, headers=head, json={"access_token": token}) + print(rea.status_code) + if rea.status_code==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif rea.status_code==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif rea.status_code==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def req1(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + del (userid[f"{ユーザーid}"]) + json.dump(userid, open(ipath,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="datacheck", description="登録人数の確認") +async def req1(interaction: discord.Interaction): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + i=len(userid) + await interaction.response.send_message(f"{i}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@client.event +async def on_interaction(interaction:discord.Interaction): + try: + if interaction.data['component_type'] == 2: + await on_button_click(interaction) + except KeyError: + pass + +async def on_button_click(interaction:discord.Interaction): + custom_id = interaction.data["custom_id"] + if int(custom_id) <8: + return + sid=interaction.guild.id + print(custom_id) + useridj=open(ipath) + userid = json.load(useridj) + a=interaction.user.id + if f"{a}" not in userid.keys(): + await interaction.response.send_message("あなたはまだ登録が終わっていません\n```\nTips\n先に「登録リンク」ボタンを押して登録を済ませましょう```", ephemeral=True) + return + try: + await interaction.user.add_roles(interaction.guild.get_role(int(custom_id))) + + except: + await interaction.response.send_message("おや?ロールが存在しないか、ロール付与の権限がありません\nBotの権限やロールの序列を確認してみましょう") + return + try: + serveridj = open(f"{ipath2}{sid}.json") + except: + f = open(f"{ipath2}{sid}.json","w") + f.write('{}') + f.close() + serveridj = open(f"{ipath2}{sid}.json") + serverid=json.load(serveridj) + useridj=open(ipath) + userid = json.load(useridj) + b = userid[f"{a}"] + if b in serverid.values(): + await interaction.response.send_message("ナイス!認証完了です!", ephemeral=True) + return + if a in userid.values(): + del (userid[f"{a}"]) + serverid.update({a:b}) + json.dump(serverid, open(f"{ipath2}{sid}.json","w")) + + await interaction.response.send_message("ナイス!認証完了です!", ephemeral=True) + +start() +client.run(BOTTOKEN) diff --git a/archive/v1/ninFlask.py b/archive/v1/ninFlask.py new file mode 100644 index 0000000..7dd6764 --- /dev/null +++ b/archive/v1/ninFlask.py @@ -0,0 +1,68 @@ +from threading import Thread +from flask import Flask, request +import os +import json +import requests + +print(os.getcwd()) +app = Flask("app") + +ipath="userdata.json のパスをここに" + +@app.route('/', methods=["GET"]) +def index(): + try: + id = request.args.get('code', '') + print(id) + if id == "": + return + API_ENDPOINT = 'https://discord.com/api/v10' + CLIENT_ID = ['OAuth2のClientIDをここに'] + my_secret = ['OAuth2のClientSecretをここに'] + CLIENT_SECRET = my_secret + REDIRECT_URI = 'Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに' + data = { + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET, + 'grant_type': 'authorization_code', + 'code': id, + 'redirect_uri': REDIRECT_URI + } + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } + r = requests.post('%s/oauth2/token' % API_ENDPOINT, data=data, headers=headers) + r.raise_for_status() + token = json.loads(r.text)['access_token'] + print(token) + data = requests.get(API_ENDPOINT + '/users/@me', headers={'Authorization': f'Bearer {token}'}) + user = json.loads(data.text)["id"] + print(user) + name = json.loads(data.text)["username"] + print(name) + + useridj=open(ipath) + userid = json.load(useridj) + + if token in userid.values(): + return f"

{name}さん、あなたはすでに登録されています!

" + if user in userid.values(): + del (userid[f"{user}"]) + try: + userid.update({user:token}) + json.dump(userid, open(ipath,"w")) + + except Exception as e: + return f"

エラー : {e}

" + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + t = Thread(target=run) + t.start() diff --git a/archive/v2/alpha/ninFlaskV2a.py b/archive/v2/alpha/ninFlaskV2a.py new file mode 100644 index 0000000..ceef50c --- /dev/null +++ b/archive/v2/alpha/ninFlaskV2a.py @@ -0,0 +1,83 @@ +from threading import Thread +from flask import Flask, request +import os +import json +import requests +from flask_discord_extended import FlaskDiscord + +print(os.getcwd()) +app = Flask("app") + +app.config["DISCORD_AUTHORIZATION"] = "BOTのトークンをここにも" +Discord = FlaskDiscord(app) + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +@app.route('/', methods=["GET"]) +def index(): + try: + id = request.args.get('code', '') + if id == "": + return + server = request.args.get('state', '') + + API_ENDPOINT = 'https://discord.com/api/v10' + CLIENT_ID = ['OAuth2のClientIDをここに'] + my_secret = ['OAuth2のClientSecretをここに'] + CLIENT_SECRET = my_secret + REDIRECT_URI = 'Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに' + data = { + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET, + 'grant_type': 'authorization_code', + 'code': id, + 'redirect_uri': REDIRECT_URI + } + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } + r = requests.post('%s/oauth2/token' % API_ENDPOINT, data=data, headers=headers) + r.raise_for_status() + token = json.loads(r.text)['access_token'] + data = requests.get(API_ENDPOINT + '/users/@me', headers={'Authorization': f'Bearer {token}'}) + user = json.loads(data.text)["id"] + name = json.loads(data.text)["username"] + + try: + serveridj = open(f"{ipath2}{server}.json") + except: + f = open(f"{ipath2}{server}.json","w") + f.write('{}') + f.close() + serveridj = open(f"{ipath2}{server}.json") + serverid=json.load(serveridj) + useridj=open(ipath) + userid = json.load(useridj) + ck=Discord.Utilities.add_role(guild=server, user_id=user, role=serverid["1"]) + if not serverid["1"] in ck["roles"]: + return "

ロールを付与できませんでした

" + + if not token in serverid.values(): + if user in serverid.values(): + del (serverid[f"{user}"]) + serverid.update({user:token}) + json.dump(serverid, open(f"{ipath2}{server}.json","w")) + + if not token in userid.values(): + if user in userid.values(): + del (userid[f"{user}"]) + userid.update({user:token}) + json.dump(userid, open(f"{ipath}","w")) + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + t = Thread(target=run) + t.start() diff --git a/archive/v2/alpha/ninV2a.py b/archive/v2/alpha/ninV2a.py new file mode 100644 index 0000000..35b289b --- /dev/null +++ b/archive/v2/alpha/ninV2a.py @@ -0,0 +1,199 @@ +import discord +import json +import requests +from ninFlaskV2 import start + + +intents = discord.Intents.all() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +BOTTOKEN="Botのトークンをここに" +authurl="作ったURLをここに" + +@client.event +async def on_ready(): + await client.change_presence(activity=discord. Activity(type=discord.ActivityType.watching, name='認証ボタン')) + print(f'Thankyou for running! {client.user}') + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + if タイトル==None: + タイトル="こんにちは!" + if 説明==None: + 説明="リンクボタンから登録して認証完了" + try: + try: + serveridj = open(f"{ipath2}{interaction.guild_id}.json") + serverid=json.load(serveridj) + serverid["1"]=(f"{ロール.id}") + json.dump(serverid, open(f"{ipath2}{interaction.guild_id}.json","w")) + except: + f = open(f"{ipath2}{interaction.guild_id}.json","w") + f.write('{}') + f.close() + serveridj = open(f"{ipath2}{interaction.guild_id}.json") + serverid=json.load(serveridj) + serverid.update({"1":f"{ロール.id}"}) + json.dump(serverid, open(f"{ipath2}{interaction.guild_id}.json","w")) + if interaction.user.guild_permissions.administrator: + ch = interaction.channel + embed = discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue()) + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl+f"&state={interaction.guild_id}") + + view = discord.ui.View() + view.add_item(button) + await interaction.response.send_message("made by .taka. thankyou for running!!!", ephemeral=True) + try: + await ch.send(embed = embed, view = view) + except: + await ch.send("メッセージの送信に失敗しました") + return + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,追加先のサーバーid:str=None,データサーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + await interaction.response.send_message("登録されたユーザーを追加中です...") + if データサーバーid==None: + useridj=open(ipath) + else: + useridj=open(f"{ipath2}{データサーバーid}.json") + userid = json.load(useridj) + if 追加先のサーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=追加先のサーバーid + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + a=0 + b=0 + c=0 + d=0 + e=0 + for key, value in userid.items(): + if key=="1": + continue + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + key, headers=head, json={"access_token": value}) + if rea.status_code==201: + a=a+1 + elif rea.status_code==204: + b=b+1 + elif rea.status_code==403: + c=c+1 + elif rea.status_code==429: + e=e+1 + else: + d=d+1 + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回Too many request\n{d}人は不明なエラーです") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + await interaction.response.send_message(f"該当ユーザーのトークンは:{token}:です\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str,サーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + if サーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=サーバーid + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + ユーザーid, headers=head, json={"access_token": token}) + print(rea.status_code) + if rea.status_code==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif rea.status_code==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif rea.status_code==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + del (userid[f"{ユーザーid}"]) + json.dump(userid, open(ipath,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="datacheck", description="登録人数の確認") +async def dck(interaction: discord.Interaction): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + i=len(userid) + await interaction.response.send_message(f"{i}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + + +start() +client.run(BOTTOKEN) diff --git a/archive/v2/ninFlaskV2.py b/archive/v2/ninFlaskV2.py new file mode 100644 index 0000000..de95f11 --- /dev/null +++ b/archive/v2/ninFlaskV2.py @@ -0,0 +1,84 @@ +from threading import Thread +from flask import Flask, request +import os +import json +import requests +from flask_discord_extended import FlaskDiscord + +print(os.getcwd()) +app = Flask("app") + +app.config["DISCORD_AUTHORIZATION"] = "BOTのトークンをここにも" +Discord = FlaskDiscord(app) + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +@app.route('/', methods=["GET"]) +def index(): + try: + id = request.args.get('code', '') + if id == "": + return + server = request.args.get('state', '') + server = server.split(",") + + API_ENDPOINT = 'https://discord.com/api/v10' + CLIENT_ID = ['OAuth2のClientIDをここに'] + my_secret = ['OAuth2のClientSecretをここに'] + CLIENT_SECRET = my_secret + REDIRECT_URI = 'Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに' + data = { + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET, + 'grant_type': 'authorization_code', + 'code': id, + 'redirect_uri': REDIRECT_URI + } + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } + r = requests.post('%s/oauth2/token' % API_ENDPOINT, data=data, headers=headers) + r.raise_for_status() + token = json.loads(r.text)['access_token'] + data = requests.get(API_ENDPOINT + '/users/@me', headers={'Authorization': f'Bearer {token}'}) + user = json.loads(data.text)["id"] + name = json.loads(data.text)["username"] + ck=Discord.Utilities.add_role(guild=server[0], user_id=user, role=server[1]) + if not f"{server[1]}" in ck["roles"]: + return "

ロールを付与できませんでした

" + + try: + serveridj = open(f"{ipath2}{server[0]}.json") + except: + f = open(f"{ipath2}{server[0]}.json","w") + f.write('{}') + f.close() + serveridj = open(f"{ipath2}{server[0]}.json") + serverid=json.load(serveridj) + useridj=open(ipath) + userid = json.load(useridj) + + if not token in serverid.values(): + if user in serverid.values(): + del (serverid[f"{user}"]) + serverid.update({user:token}) + json.dump(serverid, open(f"{ipath2}{server[0]}.json","w")) + + if not token in userid.values(): + if user in userid.values(): + del (userid[f"{user}"]) + userid.update({user:token}) + json.dump(userid, open(f"{ipath}","w")) + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + t = Thread(target=run) + t.start() diff --git a/archive/v2/ninV2.py b/archive/v2/ninV2.py new file mode 100644 index 0000000..9f2f25e --- /dev/null +++ b/archive/v2/ninV2.py @@ -0,0 +1,185 @@ +import discord +import json +import requests +from ninFlaskV2 import start + + +intents = discord.Intents.all() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +BOTTOKEN="Botのトークンをここに" +authurl="作ったURLをここに" + +@client.event +async def on_ready(): + await client.change_presence(activity=discord. Activity(type=discord.ActivityType.watching, name='認証ボタン')) + print(f'Thankyou for running! {client.user}') + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + if タイトル==None: + タイトル="こんにちは!" + if 説明==None: + 説明="リンクボタンから登録して認証完了" + try: + if interaction.user.guild_permissions.administrator: + ch = interaction.channel + embed = discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue()) + id=ロール.id + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl+f"&state={interaction.guild_id},{id}") + + view = discord.ui.View() + view.add_item(button) + await interaction.response.send_message("made by .taka. thankyou for running!!!", ephemeral=True) + try: + await ch.send(embed = embed, view = view) + except: + await ch.send("メッセージの送信に失敗しました") + return + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,追加先のサーバーid:str=None,データサーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + await interaction.response.send_message("登録されたユーザーを追加中です...") + if データサーバーid==None: + useridj=open(ipath) + else: + useridj=open(f"{ipath2}{データサーバーid}.json") + userid = json.load(useridj) + if 追加先のサーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=追加先のサーバーid + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + a=0 + b=0 + c=0 + d=0 + e=0 + for key, value in userid.items(): + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + key, headers=head, json={"access_token": value}) + if rea.status_code==201: + a=a+1 + elif rea.status_code==204: + b=b+1 + elif rea.status_code==403: + c=c+1 + elif rea.status_code==429: + e=e+1 + else: + d=d+1 + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回Too many request\n{d}人は不明なエラーです") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + await interaction.response.send_message(f"該当ユーザーのトークンは:{token}:です\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str,サーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + if サーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=サーバーid + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + ユーザーid, headers=head, json={"access_token": token}) + print(rea.status_code) + if rea.status_code==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif rea.status_code==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif rea.status_code==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + del (userid[f"{ユーザーid}"]) + json.dump(userid, open(ipath,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="datacheck", description="登録人数の確認") +async def dck(interaction: discord.Interaction): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + i=len(userid) + await interaction.response.send_message(f"{i}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + + +start() +client.run(BOTTOKEN) diff --git a/archive/v3/call.py b/archive/v3/call.py new file mode 100644 index 0000000..cd04b24 --- /dev/null +++ b/archive/v3/call.py @@ -0,0 +1,106 @@ +import discord +import json +import requests +import time +from threading import Thread + +intents = discord.Intents.all() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +BOTTOKEN="Botのトークンをここに + +@client.event +async def on_ready(): + print(f'This is /call! {client.user}') + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,追加先のサーバーid:str=None,データサーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + nj=open("now.json") + nowj = json.load(nj) + if nowj["now"] == "1": + nowj["now"]="0" + json.dump(nowj, open("now.json","w")) + nj.close() + return + + nowj["now"]="1" + json.dump(nowj, open("now.json","w")) + nj.close() + await interaction.response.send_message("登録されたユーザーを追加中です...") + if データサーバーid==None: + useridj=open(f"{ipath2}{interaction.guild_id}.json") + else: + useridj=open(f"{ipath2}{データサーバーid}.json") + userid = json.load(useridj) + if 追加先のサーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=追加先のサーバーid + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + a=0 + b=0 + c=0 + d=0 + e=0 + for key, value in list(userid.items()): + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + key, headers=head, json={"access_token": value}) + if rea.status_code==201: + a=a+1 + elif rea.status_code==204: + b=b+1 + elif rea.status_code==403: + c=c+1 + del (userid[f"{key}"]) + elif rea.status_code==429: + e=e+1 + else: + d=d+1 + + #time.sleep()# <- TooManyRequest対策です!!おこのみの数値または必要ないなら消してください! + if データサーバーid==None: + json.dump(userid, open(f"{ipath2}{interaction.guild_id}.json","w")) + else: + json.dump(userid, open(f"{ipath2}{データサーバーid}.json","w")) + nj=open("now.json") + nowj = json.load(nj) + nowj["now"]="0" + json.dump(nowj, open("now.json","w")) + nj.close() + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回TooManyRequest\n{d}人は不明なエラーです") + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + None +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="datacheck", description="登録人数の確認") +async def datac(interaction: discord.Interaction): + None + +def callstart(): + c = Thread(target=main) + c.start() + +def main(): + client.run(BOTTOKEN) diff --git a/archive/v3/ninFlaskV3.py b/archive/v3/ninFlaskV3.py new file mode 100644 index 0000000..3bc9468 --- /dev/null +++ b/archive/v3/ninFlaskV3.py @@ -0,0 +1,86 @@ +from threading import Thread +from flask import Flask, request +import os +import json +import requests +from flask_discord_extended import FlaskDiscord + +print(os.getcwd()) +app = Flask("app") + +app.config["DISCORD_AUTHORIZATION"] = "BOTのトークンをここにも" +Discord = FlaskDiscord(app) + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +@app.route('/', methods=["GET"]) +def index(): + try: + id = request.args.get('code', '') + if id == "": + return + server = request.args.get('state', '') + server=(server.split("=")) + serverstate=int(server[0],16) + rolestate=int(server[1],8) + print(server) + + API_ENDPOINT = 'https://discord.com/api/v10' + CLIENT_ID = ['OAuth2のClientIDをここに'] + CLIENT_SECRET = ['OAuth2のClientSecretをここに'] + REDIRECT_URI = 'Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに' + data = { + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET, + 'grant_type': 'authorization_code', + 'code': id, + 'redirect_uri': REDIRECT_URI + } + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } + r = requests.post('%s/oauth2/token' % API_ENDPOINT, data=data, headers=headers) + r.raise_for_status() + token = json.loads(r.text)['access_token'] + data = requests.get(API_ENDPOINT + '/users/@me', headers={'Authorization': f'Bearer {token}'}) + user = json.loads(data.text)["id"] + name = json.loads(data.text)["username"] + ck=Discord.Utilities.add_role(guild=serverstate, user_id=user, role=rolestate) + if not f"{serverstate}" in ck["roles"]: + return "

ロールを付与できませんでした

" + + try: + serveridj = open(f"{ipath2}{serverstate}.json") + except: + f = open(f"{ipath2}{serverstate}.json","w") + f.write('{}') + f.close() + serveridj = open(f"{ipath2}{serverstate}.json") + serverid=json.load(serveridj) + useridj=open(ipath) + userid = json.load(useridj) + + if not token in serverid.values(): + if user in serverid.values(): + del (serverid[f"{user}"]) + serverid.update({user:token}) + json.dump(serverid, open(f"{ipath2}{serverstate}.json","w")) + + if not token in userid.values(): + if user in userid.values(): + del (userid[f"{user}"]) + userid.update({user:token}) + json.dump(userid, open(f"{ipath}","w")) + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + t = Thread(target=run) + t.start() diff --git a/archive/v3/ninV3.py b/archive/v3/ninV3.py new file mode 100644 index 0000000..536849a --- /dev/null +++ b/archive/v3/ninV3.py @@ -0,0 +1,156 @@ +import discord +import json +import requests +import time +from ninFlaskV3 import start +from call import callstart + +intents = discord.Intents.all() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +BOTTOKEN="Botのトークンをここに" +authurl="作ったURLをここに" + +@client.event +async def on_ready(): + await client.change_presence(activity=discord. Activity(type=discord.ActivityType.watching, name='認証ボタン')) + print(f'Thankyou for running! {client.user}') + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + if タイトル==None: + タイトル="こんにちは!" + if 説明==None: + 説明="リンクボタンから登録して認証完了" + try: + if interaction.user.guild_permissions.administrator: + ch = interaction.channel + embed = discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue()) + id=ロール.id + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl+f"&state={(hex(interaction.guild_id)).upper()[2:]}={(oct(ロール.id)).upper()[2:]}") + + view = discord.ui.View() + view.add_item(button) + await interaction.response.send_message("made by .taka. thankyou for running!!!", ephemeral=True) + try: + await ch.send(embed = embed, view = view) + except: + await ch.send("メッセージの送信に失敗しました") + return + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,追加先のサーバーid:str=None,データサーバーid:str=None): + nj=open("now.json") + now=json.load(nj) + if now["now"]=="1": + await interaction.response.send_message(f"現在/call中です", ephemeral=True) + + +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + await interaction.response.send_message(f"該当ユーザーのトークンは:{token}:です\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str,サーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + if サーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=サーバーid + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + ユーザーid, headers=head, json={"access_token": token}) + print(rea.status_code) + if rea.status_code==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif rea.status_code==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif rea.status_code==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + del (userid[f"{ユーザーid}"]) + json.dump(userid, open(ipath,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:{ユーザーid}", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="datacheck", description="登録人数の確認") +async def dck(interaction: discord.Interaction): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + i=len(userid) + await interaction.response.send_message(f"{i}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +start() +time.sleep(1) +callstart() +time.sleep(1) +client.run(BOTTOKEN) diff --git a/archive/v3/now.json b/archive/v3/now.json new file mode 100644 index 0000000..af18f8c --- /dev/null +++ b/archive/v3/now.json @@ -0,0 +1 @@ +{"now":"0"} \ No newline at end of file diff --git a/archive/v3/server/1234567890.json b/archive/v3/server/1234567890.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/archive/v3/server/1234567890.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/archive/v3/userid.json b/archive/v3/userid.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/archive/v3/userid.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/archive/v3/v3a/ninFlaskV3.py b/archive/v3/v3a/ninFlaskV3.py new file mode 100644 index 0000000..278b303 --- /dev/null +++ b/archive/v3/v3a/ninFlaskV3.py @@ -0,0 +1,86 @@ +from threading import Thread +from flask import Flask, request +import os +import json +import requests + +print(os.getcwd()) +app = Flask("app") + +BOTTOKEN = "BOTのトークンをここにも" + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" + +@app.route('/', methods=["GET"]) +def index(): + try: + id = request.args.get('code', '') + if id == "": + return + server = request.args.get('state', '') + server=(server.split("=")) + serverstate=int(server[0],16) + rolestate=int(server[1],8) + print(server) + + API_ENDPOINT = 'https://discord.com/api/v10' + CLIENT_ID = ['OAuth2のClientIDをここに'] + CLIENT_SECRET = ['OAuth2のClientSecretをここに'] + REDIRECT_URI = 'Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに' + data = { + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET, + 'grant_type': 'authorization_code', + 'code': id, + 'redirect_uri': REDIRECT_URI + } + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } + r = requests.post('%s/oauth2/token' % API_ENDPOINT, data=data, headers=headers) + r.raise_for_status() + token = json.loads(r.text)['access_token'] + data = requests.get(API_ENDPOINT + '/users/@me', headers={'Authorization': f'Bearer {token}'}) + user = json.loads(data.text)["id"] + name = json.loads(data.text)["username"] + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{serverstate}" + '/members/' + f"{user}" + "/roles/" + f"{rolestate}", headers=head) + if not rea.status_code==204: + return f"

ロールの付与に失敗しました
Botがロールを付与できる状態か確認してください
Botのロールが付与したいロールの1つ上に置かれていない場合や、管理権限に2段階認証が必要になっている場合ロールが付与できません!

" + + try: + serveridj = open(f"{ipath2}{serverstate}.json") + except: + f = open(f"{ipath2}{serverstate}.json","w") + f.write('{}') + f.close() + serveridj = open(f"{ipath2}{serverstate}.json") + serverid=json.load(serveridj) + useridj=open(ipath) + userid = json.load(useridj) + + if not token in serverid.values(): + if user in serverid.values(): + del (serverid[f"{user}"]) + serverid.update({user:token}) + json.dump(serverid, open(f"{ipath2}{serverstate}.json","w")) + + if not token in userid.values(): + if user in userid.values(): + del (userid[f"{user}"]) + userid.update({user:token}) + json.dump(userid, open(f"{ipath}","w")) + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + t = Thread(target=run) + t.start() diff --git a/archive/v4/call.py b/archive/v4/call.py new file mode 100644 index 0000000..f517e72 --- /dev/null +++ b/archive/v4/call.py @@ -0,0 +1,113 @@ +import discord +import json +import requests +import time +from threading import Thread +import v4path + +intents = discord.Intents.default() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + +ipath=v4path.ipath +ipath2=v4path.ipath2 +BOTTOKEN=v4path.BOTTOKEN +nowjson=v4path.nowjson + +@client.event +async def on_ready(): + print(f'This is /call! {client.user}') + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,データサーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + nj=open(nowjson) + nowj = json.load(nj) + if nowj["now"] == "1": + nowj["now"]="0" + json.dump(nowj, open(nowjson,"w")) + nj.close() + return + + nowj["now"]="1" + json.dump(nowj, open(nowjson,"w")) + nj.close() + zenj=open(ipath) + zendata = json.load(zenj) + await interaction.response.send_message("登録されたユーザーを追加中です...") + if データサーバーid==None: + useridj=open(f"{ipath2}{interaction.guild_id}.json") + elif データサーバーid=="all": + useridj=zenj + else: + useridj=open(f"{ipath2}{データサーバーid}.json") + userid = json.load(useridj) + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + a=0 + b=0 + c=0 + d=0 + e=0 + f=0 + for key, value in list(userid.items()): + rea=requests.put('https://discord.com/api/guilds/' + f"{interaction.guild_id}" + '/members/' + key, headers=head, json={"access_token": zendata[key]}) + if rea.status_code==201: + a=a+1 + elif rea.status_code==204: + b=b+1 + elif rea.status_code==403: + c=c+1 + del (zendata[f"{key}"]) + del (userid[f"{key}"]) + elif rea.status_code==429: + e=e+1 + elif rea.status_code==400: + f=f+1 + else: + d=d+1 + + #time.sleep()# <- TooManyRequest対策です!!おこのみの数値または必要ないなら消してください! + if データサーバーid==None: + json.dump(userid, open(f"{ipath2}{interaction.guild_id}.json","w")) + json.dump(zendata, open(ipath,"w")) + elif データサーバーid=="all": + json.dump(userid, open(ipath,"w")) + else: + json.dump(userid, open(f"{ipath2}{データサーバーid}.json","w")) + json.dump(zendata, open(ipath,"w")) + nj=open(nowjson) + nowj = json.load(nj) + nowj["now"]="0" + json.dump(nowj, open(nowjson,"w")) + nj.close() + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回TooManyRequest\n{f}人はこれ以上サーバーに参加できません\n{d}人は不明なエラーです") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + None +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="datacheck", description="登録人数の確認") +async def datac(interaction: discord.Interaction): + None + +def callstart(): + c = Thread(target=main) + c.start() + +def main(): + client.run(BOTTOKEN) diff --git a/archive/v4/ninFlaskV4.py b/archive/v4/ninFlaskV4.py new file mode 100644 index 0000000..fe13d98 --- /dev/null +++ b/archive/v4/ninFlaskV4.py @@ -0,0 +1,76 @@ +from threading import Thread +from flask import Flask, request +import json +import requests +import v4path + +app = Flask("app") +ipath=v4path.ipath +ipath2=v4path.ipath2 +BOTTOKEN=v4path.BOTTOKEN + +API_ENDPOINT = v4path.API_ENDPOINT +CLIENT_ID = v4path.CLIENT_ID +CLIENT_SECRET = v4path.CLIENT_SECRET +REDIRECT_URI = v4path.REDIRECT_URI + +@app.route('/', methods=["GET"]) +def index(): + try: + id = request.args.get('code', '') + if id == "": + return + server = request.args.get('state', '') + server=(server.split("=")) + serverstate=int(server[0],16) + rolestate=int(server[1],8) + try: + serveridj = open(f"{ipath2}{serverstate}.json") + except: + return + + data = { + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET, + 'grant_type': 'authorization_code', + 'code': id, + 'redirect_uri': REDIRECT_URI + } + headers = { + 'Content-Type': 'application/x-www-form-urlencoded' + } + r = requests.post('%s/oauth2/token' % API_ENDPOINT, data=data, headers=headers) + r.raise_for_status() + token = json.loads(r.text)['access_token'] + data = requests.get(API_ENDPOINT + '/users/@me', headers={'Authorization': f'Bearer {token}'}) + user = json.loads(data.text)["id"] + name = json.loads(data.text)["username"] + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{serverstate}" + '/members/' + f"{user}" + "/roles/" + f"{rolestate}", headers=head) + if not rea.status_code==204: + return f"

ロールの付与に失敗しました
Botがロールを付与できる状態か確認してください
Botのロールが付与したいロールの1つ上に置かれていない場合や、管理権限に2段階認証が必要になっている場合ロールが付与できません!

" + + serverid=json.load(serveridj) + useridj=open(ipath) + userid = json.load(useridj) + + if not user in serverid.keys(): + serverid.update({user:f"{len(userid)}"}) + json.dump(serverid, open(f"{ipath2}{serverstate}.json","w")) + + if not token in userid.values(): + userid.update({user:token}) + json.dump(userid, open(f"{ipath}","w")) + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + t = Thread(target=run) + t.start() diff --git a/archive/v4/ninV4.py b/archive/v4/ninV4.py new file mode 100644 index 0000000..d53dfe6 --- /dev/null +++ b/archive/v4/ninV4.py @@ -0,0 +1,161 @@ +import discord +import json +import requests +import time +from ninFlaskV4 import start +from call import callstart +import v4path + +intents = discord.Intents.default() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + +ipath=v4path.ipath +ipath2=v4path.ipath2 +BOTTOKEN=v4path.BOTTOKEN +authurl=v4path.authurl +nowjson=v4path.nowjson + +@client.event +async def on_ready(): + await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name='認証ボタン')) + print(f'Thankyou for running! {client.user}') + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str="こんにちは!",説明:str="リンクボタンから登録して認証完了"): + try: + if interaction.user.guild_permissions.administrator: + embed = discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue()) + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl+f"&state={(hex(interaction.guild_id)).upper()[2:]}={(oct(ロール.id)).upper()[2:]}") + view = discord.ui.View() + view.add_item(button) + await interaction.response.send_message("made by ```.taka.``` thankyou for running!!!", ephemeral=True) + try: + f=open(f"{ipath2}{interaction.guild.id}.json") + f2 = json.load(f) + except: + f = open(f"{ipath2}{interaction.guild.id}.json","w") + f.write('{}') + f.close() + try: + await interaction.channel.send(embed = embed, view = view) + except: + await interaction.channel.send("メッセージの送信に失敗しました") + return + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,データサーバーid:str=None): + nj=open(nowjson) + now=json.load(nj) + if now["now"]=="1": + await interaction.response.send_message(f"現在/call中です", ephemeral=True) + + +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + await interaction.response.send_message(f"該当ユーザーのトークンは```{token}```です\nUserID:```{ユーザーid}```", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str,サーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + token=(userid[f"{ユーザーid}"]) + if サーバーid==None: + guild_id = interaction.guild.id + else: + guild_id=サーバーid + + head = {"Authorization": 'Bot ' + BOTTOKEN, 'Content-Type': 'application/json'} + rea=requests.put('https://discord.com/api/guilds/' + f"{guild_id}" + '/members/' + ユーザーid, headers=head, json={"access_token": token}) + print(rea.status_code) + if rea.status_code==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif rea.status_code==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif rea.status_code==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + elif rea.status_code==400: + await interaction.response.send_message("該当ユーザーはこれ以上サーバーに参加できません") + elif rea.status_code==429: + await interaction.response.send_message("429レートリミットです") + + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + del (userid[f"{ユーザーid}"]) + json.dump(userid, open(ipath,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:```{userid}```", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="datacheck", description="登録人数の確認") +async def dck(interaction: discord.Interaction): + try: + if interaction.user.guild_permissions.administrator: + useridj=open(ipath) + userid = json.load(useridj) + try: + i=len(userid) + await interaction.response.send_message(f"{i}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +start() +time.sleep(1) +callstart() +time.sleep(1) +client.run(BOTTOKEN) diff --git a/archive/v4/now.json b/archive/v4/now.json new file mode 100644 index 0000000..af18f8c --- /dev/null +++ b/archive/v4/now.json @@ -0,0 +1 @@ +{"now":"0"} \ No newline at end of file diff --git a/archive/v4/servser/1234567890.json b/archive/v4/servser/1234567890.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/archive/v4/servser/1234567890.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/archive/v4/userdata.json b/archive/v4/userdata.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/archive/v4/userdata.json @@ -0,0 +1 @@ +{} diff --git a/archive/v4/v4path.py b/archive/v4/v4path.py new file mode 100644 index 0000000..13f8672 --- /dev/null +++ b/archive/v4/v4path.py @@ -0,0 +1,10 @@ +BOTTOKEN="Botのトークンをここに" +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" +authurl="作ったURLをここに" +nowjson="now.json"#now.jsonのパスをここに + +API_ENDPOINT = 'https://discord.com/api/v10' +CLIENT_ID = ['OAuth2のClientIDをここに'] +CLIENT_SECRET = ['OAuth2のClientSecretをここに'] +REDIRECT_URI = 'Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに' diff --git a/archive/v5/call.py b/archive/v5/call.py new file mode 100644 index 0000000..952608c --- /dev/null +++ b/archive/v5/call.py @@ -0,0 +1,89 @@ +import discord +import json +import asyncio +from threading import Thread +import v5path +from EAGM import EAGM + +intents = discord.Intents.default() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + +ipath=v5path.ipath +ipath2=v5path.ipath2 +BOTTOKEN=v5path.BOTTOKEN +eagm=EAGM(bot_token=BOTTOKEN) + +@client.event +async def on_ready(): + print(f'This is /call! {client.user}') + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,データサーバーid:str=None): + try: + if interaction.user.guild_permissions.administrator: + zendata = json.load(open(ipath)) + if データサーバーid==None: + useridj=open(f"{ipath2}{interaction.guild_id}.json") + elif データサーバーid=="all": + useridj=open(ipath) + else: + useridj=open(f"{ipath2}{データサーバーid}.json") + userid = json.load(useridj) + a=b=c=d=e=f=0 + for key, value in list(userid.items()): + addmember=eagm.add_member(access_token=zendata[key],user_id=key,guild_id=str(interaction.guild.id)) + if addmember==201: + a=a+1 + elif addmember==204: + b=b+1 + elif addmember==403: + c=c+1 + del (zendata[f"{key}"]) + del (userid[f"{key}"]) + elif addmember==429: + e=e+1 + elif addmember==400: + f=f+1 + else: + d=d+1 + + asyncio.sleep(1)# <- TooManyRequest対策です!!おこのみの数値または必要ないなら消してください! + if データサーバーid==None: + json.dump(userid, open(f"{ipath2}{interaction.guild_id}.json","w")) + json.dump(zendata, open(ipath,"w")) + elif データサーバーid=="all": + json.dump(userid, open(ipath,"w")) + else: + json.dump(userid, open(f"{ipath2}{データサーバーid}.json","w")) + json.dump(zendata, open(ipath,"w")) + + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回TooManyRequest\n{f}人はこれ以上サーバーに参加できません\n{d}人は不明なエラーです") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + None +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="datacheck", description="登録人数の確認") +async def datac(interaction: discord.Interaction): + None + +def callstart(): + Thread(target=main).start() + +def main(): + client.run(BOTTOKEN) diff --git a/archive/v5/ninFlaskV5.py b/archive/v5/ninFlaskV5.py new file mode 100644 index 0000000..6576026 --- /dev/null +++ b/archive/v5/ninFlaskV5.py @@ -0,0 +1,61 @@ +from threading import Thread +from flask import Flask, request +import json +import v5path +from EAGM import EAGM + +app = Flask("app") +ipath=v5path.ipath +ipath2=v5path.ipath2 +BOTTOKEN=v5path.BOTTOKEN + +CLIENT_ID = v5path.CLIENT_ID +CLIENT_SECRET = v5path.CLIENT_SECRET +REDIRECT_URI = v5path.REDIRECT_URI + +eagm=EAGM(bot_token=BOTTOKEN,client_id=CLIENT_ID,client_secret=CLIENT_SECRET,redirect_uri=REDIRECT_URI) + +@app.route('/', methods=["GET"]) +def index(): + try: + code = request.args.get('code', '') + if code == "": + return + state = request.args.get('state', '').split("=") + serverstate=int(state[0],16) + rolestate=int(state[1],8) + try: + serveridj = open(f"{ipath2}{serverstate}.json") + except: + return + + gettoken= eagm.get_token(code) + token = gettoken['access_token'] + getuser = eagm.get_user(token) + user = getuser["id"] + name = getuser["username"] + addrole=eagm.add_role(user_id=user,guild_id=str(serverstate),role_id=str(rolestate)) + if not addrole==204: + return f"

ロールの付与に失敗しました
Botがロールを付与できる状態か確認してください
Botのロールが付与したいロールの1つ上に置かれていない場合や、管理権限に2段階認証が必要になっている場合ロールが付与できません!

" + + serverid=json.load(serveridj) + userid = json.load(open(ipath)) + + if not user in serverid.keys(): + serverid.update({user:f"{len(userid)}"}) + json.dump(serverid, open(f"{ipath2}{serverstate}.json","w")) + + if not token in userid.values(): + userid.update({user:token}) + json.dump(userid, open(f"{ipath}","w")) + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + Thread(target=run).start() diff --git a/archive/v5/ninV5.py b/archive/v5/ninV5.py new file mode 100644 index 0000000..a1059ac --- /dev/null +++ b/archive/v5/ninV5.py @@ -0,0 +1,146 @@ +import discord +import json +import time +from ninFlaskV5 import start +from call import callstart +import v5path +from EAGM import EAGM + +intents = discord.Intents.default() +client = discord.Client(intents = intents) +tree = discord.app_commands.CommandTree(client) + +ipath=v5path.ipath +ipath2=v5path.ipath2 +BOTTOKEN=v5path.BOTTOKEN +authurl=v5path.authurl +eagm=EAGM(bot_token=BOTTOKEN) + +@client.event +async def on_ready(): + await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name='認証ボタン')) + print(f'Thankyou for running! {client.user}') + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str="こんにちは!",説明:str="リンクボタンから登録して認証完了"): + try: + if interaction.user.guild_permissions.administrator: + embed = discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue()) + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl+f"&state={(hex(interaction.guild_id)).upper()[2:]}={(oct(ロール.id)).upper()[2:]}") + view = discord.ui.View() + view.add_item(button) + await interaction.response.send_message("made by ```.taka.``` thankyou for running!!!", ephemeral=True) + try: + json.load(open(f"{ipath2}{interaction.guild.id}.json")) + except: + setup={} + json.dump(setup,open(f"{ipath2}{interaction.guild.id}.json","w")) + try: + await interaction.channel.send(embed = embed, view = view) + except: + await interaction.channel.send("メッセージの送信に失敗しました") + return + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,データサーバーid:str=None): + await interaction.response.send_message("登録されたユーザーを追加中です...") + + +@tree.command(name="check", description="UserIDを使ってアクセストークンを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + userid = json.load(open(ipath)) + try: + token=(userid[f"{ユーザーid}"]) + await interaction.response.send_message(f"該当ユーザーのトークンは```{token}```です\nUserID:```{ユーザーid}```", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + userid = json.load(open(ipath)) + try: + token=(userid[f"{ユーザーid}"]) + addmember=eagm.add_member(access_token=token,user_id=ユーザーid,guild_id=str(interaction.guild_id)) + print(addmember) + if addmember==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif addmember==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif addmember==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + elif addmember==400: + await interaction.response.send_message("該当ユーザーはこれ以上サーバーに参加できません") + elif addmember==429: + await interaction.response.send_message("429レートリミットです") + + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except Exception as e: + await interaction.response.send_message(f"ユーザー情報が見つかりませんでした\n{e}", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + try: + if interaction.user.guild_permissions.administrator: + userid = json.load(open(ipath)) + try: + del (userid[f"{ユーザーid}"]) + json.dump(userid, open(ipath,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:```{userid}```", ephemeral=False) + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした", ephemeral=False) + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +@tree.command(name="datacheck", description="登録人数の確認") +async def dck(interaction: discord.Interaction): + try: + if interaction.user.guild_permissions.administrator: + userid = json.load(open(ipath)) + try: + i=len(userid) + await interaction.response.send_message(f"{i}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + else: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + except: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + + +start() +time.sleep(1) +callstart() +time.sleep(1) +client.run(BOTTOKEN) diff --git a/archive/v5/server/1234567890.json b/archive/v5/server/1234567890.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/archive/v5/server/1234567890.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/archive/v5/userdata.json b/archive/v5/userdata.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/archive/v5/userdata.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/archive/v5/v5path.py b/archive/v5/v5path.py new file mode 100644 index 0000000..abdb072 --- /dev/null +++ b/archive/v5/v5path.py @@ -0,0 +1,8 @@ +BOTTOKEN="Botのトークンをここに" +CLIENT_ID = 'OAuth2のClientIDをここに' +CLIENT_SECRET = 'OAuth2のClientSecretをここに' +REDIRECT_URI = 'Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに' + +ipath="userdata.json のパスをここに" +ipath2="サーバーID.json のフォルダーパスをここに" +authurl="作ったURLをここに" \ No newline at end of file diff --git a/v6/call.py b/v6/call.py new file mode 100644 index 0000000..7c7059d --- /dev/null +++ b/v6/call.py @@ -0,0 +1,91 @@ +import discord +import json +import asyncio +from threading import Thread +import v6path +from EAGM import EAGM + +client = discord.Client(intents = discord.Intents.default()) +tree = discord.app_commands.CommandTree(client) + +usadata_path=v6path.usadata_path +serverdata_folder_path=v6path.serverdata_folder_path +BOTTOKEN=v6path.BOTTOKEN +eagm=EAGM(bot_token=BOTTOKEN) + +@client.event +async def on_ready(): + print(f'This is /call! {client.user}') + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,データサーバーid:str=None): + if not interaction.guild: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + return + + if not interaction.user.guild_permissions.administrator: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + + alldata = json.load(open(usadata_path)) + + if not データサーバーid: + data_path=open(f"{serverdata_folder_path}{interaction.guild_id}.json") + elif データサーバーid=="all": + data_path=open(usadata_path) + else: + data_path=open(f"{serverdata_folder_path}{データサーバーid}.json") + + userdata = json.load(data_path) + a=b=c=d=e=f=0 + for key in list(userdata.keys()): + addmember=eagm.add_member(access_token=alldata[key],user_id=key,guild_id=str(interaction.guild.id)) + if addmember==201: + a=a+1 + elif addmember==204: + b=b+1 + elif addmember==403: + c=c+1 + del alldata[key] + del userdata[key] + elif addmember==429: + e=e+1 + elif addmember==400: + f=f+1 + else: + d=d+1 + + await asyncio.sleep(1)# <- TooManyRequest対策です!!おこのみの数値または必要ないなら消してください! + + if not データサーバーid: + json.dump(userdata, open(f"{serverdata_folder_path}{interaction.guild_id}.json","w")) + json.dump(alldata, open(usadata_path,"w")) + elif データサーバーid=="all": + json.dump(userdata, open(usadata_path,"w")) + else: + json.dump(userdata, open(f"{serverdata_folder_path}{データサーバーid}.json","w")) + json.dump(alldata, open(usadata_path,"w")) + + await interaction.channel.send(f"リクエストが終わりました\n{a}人を追加\n{b}人は既に追加されていて\n{c}人の情報が失効済み\n{e}回TooManyRequest\n{f}人はこれ以上サーバーに参加できません\n{d}人は不明なエラーです") + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str=None,説明:str=None): + None +@tree.command(name="check", description="UserIDを使ってTokenを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + None +@tree.command(name="datacheck", description="登録人数の確認") +async def datac(interaction: discord.Interaction): + None + +def callstart(): + Thread(target=main).start() + +def main(): + client.run(BOTTOKEN) diff --git a/v6/ninFlaskV6.py b/v6/ninFlaskV6.py new file mode 100644 index 0000000..c01668b --- /dev/null +++ b/v6/ninFlaskV6.py @@ -0,0 +1,58 @@ +from threading import Thread +from flask import Flask, request +import json +import v6path +from EAGM import EAGM + +app = Flask("app") +usadata_path=v6path.usadata_path +serverdata_folder_path=v6path.serverdata_folder_path +BOTTOKEN=v6path.BOTTOKEN + +CLIENT_ID = v6path.CLIENT_ID +CLIENT_SECRET = v6path.CLIENT_SECRET +REDIRECT_URI = v6path.REDIRECT_URI + +eagm=EAGM(bot_token=BOTTOKEN,client_id=CLIENT_ID,client_secret=CLIENT_SECRET,redirect_uri=REDIRECT_URI) + +@app.route("/", methods=["GET"]) +def index(): + try: + code = request.args.get("code", "") + if code == "": + return + state = request.args.get("state", "").split("=") + serverstate = int(state[0],16) + rolestate = int(state[1],8) + try: + open(f"{serverdata_folder_path}{serverstate}.json") + except: + return + + eagm.get_token(code) + eagm.get_user(eagm.access_token) + addrole=eagm.add_role(user_id=eagm.user_id,guild_id=str(serverstate),role_id=str(rolestate)) + if addrole!=204: + return f"

ロールの付与に失敗しました
Botがロールを付与できる状態か確認してください
Botのロールが付与したいロールの1つ上に置かれていない場合や、管理権限に2段階認証が必要になっている場合ロールが付与できません!

" + + serverid = json.load(open(f"{serverdata_folder_path}{serverstate}.json")) + userdata = json.load(open(usadata_path)) + + if not eagm.user_id in serverid.keys(): + serverid.update({eagm.user_id:str(len(userdata))}) + json.dump(serverid, open(f"{serverdata_folder_path}{serverstate}.json","w")) + + if not eagm.access_token in userdata.values(): + userdata.update({eagm.user_id:eagm.access_token}) + json.dump(userdata, open(usadata_path,"w")) + + except Exception as e: + return f"

エラー : {e}

" + + return f"

登録成功! {eagm.global_name}さんよろしく!

" + +def run(): + app.run(debug=False,host="0.0.0.0") + +def start(): + Thread(target=run).start() diff --git a/v6/ninV6.py b/v6/ninV6.py new file mode 100644 index 0000000..1dfeaa3 --- /dev/null +++ b/v6/ninV6.py @@ -0,0 +1,145 @@ +import discord +import json +import time +from ninFlaskV6 import start +from call import callstart +import v6path +from EAGM import EAGM + +client = discord.Client(intents = discord.Intents.default()) +tree = discord.app_commands.CommandTree(client) + +usadata_path=v6path.usadata_path +serverdata_folder_path=v6path.serverdata_folder_path +BOTTOKEN=v6path.BOTTOKEN +authurl=v6path.authurl +eagm=EAGM(bot_token=BOTTOKEN) + +@client.event +async def on_ready(): + await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="認証ボタン")) + print(f"Thankyou for running! {client.user}") + await tree.sync() + +@tree.command(name="button", description="認証ボタンの表示") +async def panel_au(interaction: discord.Interaction,ロール:discord.Role,タイトル:str="こんにちは!",説明:str="リンクボタンから登録して認証完了"): + if not interaction.guild: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + return + + if not interaction.user.guild_permissions.administrator: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + + button = discord.ui.Button(label="登録リンク", style=discord.ButtonStyle.primary, url=authurl+f"&state={(hex(interaction.guild_id)).upper()[2:]}={(oct(ロール.id)).upper()[2:]}") + view = discord.ui.View() + view.add_item(button) + await interaction.response.send_message("made by ```.taka.``` thankyou for running!", ephemeral=True) + try: + json.load(open(f"{serverdata_folder_path}{interaction.guild.id}.json")) + except: + json.dump({},open(f"{serverdata_folder_path}{interaction.guild.id}.json","w")) + try: + await interaction.channel.send(view=view,embed=discord.Embed(title=タイトル,description=説明,color=discord.Colour.blue())) + except: + await interaction.channel.send("メッセージの送信に失敗しました") + + +@tree.command(name="call", description="認証したひと”全員”を追加する") +async def call(interaction: discord.Interaction,データサーバーid:str=None): + await interaction.response.send_message("登録されたユーザーを追加中です...") + + +@tree.command(name="check", description="UserIDを使ってアクセストークンを検索する") +async def check(interaction: discord.Interaction,ユーザーid:str): + if not interaction.guild: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + return + + if not interaction.user.guild_permissions.administrator: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + + userdata = json.load(open(usadata_path)) + try: + await interaction.response.send_message(f"該当ユーザーのトークンは```{userdata[ユーザーid]}```です\nUserID:```{ユーザーid}```") + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした") + + +@tree.command(name="request1", description="UserIDとトークンを使って1人リクエストする") +async def req1(interaction: discord.Interaction,ユーザーid:str): + if not interaction.guild: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + return + + if not interaction.user.guild_permissions.administrator: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + + userdata = json.load(open(usadata_path)) + try: + addmember=eagm.add_member(access_token=userdata[ユーザーid],user_id=ユーザーid,guild_id=str(interaction.guild_id)) + if addmember==201: + await interaction.response.send_message("該当のユーザーを追加しました") + elif addmember==204: + await interaction.response.send_message("該当のユーザーは既に追加されています") + elif addmember==403: + await interaction.response.send_message("該当ユーザーの保存情報は失効しています") + del userdata[ユーザーid] + json.dump(userdata, open(usadata_path,"w")) + elif addmember==400: + await interaction.response.send_message("該当ユーザーはこれ以上サーバーに参加できません") + elif addmember==404: + await interaction.response.send_message("該当ユーザーのアカウントは削除されています") + elif addmember==429: + await interaction.response.send_message("429レートリミットです") + + else: + await interaction.response.send_message("該当ユーザーの追加は失敗しました") + except Exception as e: + await interaction.response.send_message(f"ユーザー情報が見つかりませんでした\n{e}") + + +@tree.command(name="delkey", description="該当ユーザーの情報を削除する") +async def delk(interaction: discord.Interaction,ユーザーid:str): + if not interaction.guild: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + return + + if not interaction.user.guild_permissions.administrator: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + + userdata = json.load(open(usadata_path)) + try: + del userdata[ユーザーid] + json.dump(userdata, open(usadata_path,"w")) + await interaction.response.send_message(f"該当ユーザーの情報を削除しました\nUserID:```{ユーザーid}```") + + except: + await interaction.response.send_message("ユーザー情報が見つかりませんでした") + + +@tree.command(name="datacheck", description="登録人数の確認") +async def dck(interaction: discord.Interaction): + if not interaction.guild: + await interaction.response.send_message("DMでは使えません", ephemeral=True) + return + + if not interaction.user.guild_permissions.administrator: + await interaction.response.send_message("管理者しか使えません", ephemeral=True) + return + + try: + await interaction.response.send_message(f"{len(json.load(open(usadata_path)))}人のデータが登録されています") + except: + await interaction.response.send_message("ファイルが使えなくなっています") + + +start() +time.sleep(1) +callstart() +time.sleep(1) +client.run(BOTTOKEN) diff --git a/v6/server/1234567890.json b/v6/server/1234567890.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/v6/server/1234567890.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/v6/userdata.json b/v6/userdata.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/v6/userdata.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/v6/v6path.py b/v6/v6path.py new file mode 100644 index 0000000..3089be8 --- /dev/null +++ b/v6/v6path.py @@ -0,0 +1,8 @@ +BOTTOKEN = "Botのトークンをここに" +CLIENT_ID = "OAuth2のClientIDをここに" +CLIENT_SECRET = "OAuth2のClientSecretをここに" +REDIRECT_URI = "Flaskサーバーが建てられている場所(IPアドレスやドメイン)をここに" + +usadata_path = "userdata.json のパスをここに" +serverdata_folder_path = "サーバーID.json のフォルダーパスをここに" +authurl = "作ったURLをここに" \ No newline at end of file