From b85c15cc9651047263e10f05c2930748eb0e46a4 Mon Sep 17 00:00:00 2001 From: GYH <43509927+guoyuhao2330@users.noreply.github.com> Date: Fri, 31 May 2024 13:47:15 +0800 Subject: [PATCH] Add file rag/svr/discord_svr.py (#1008) ### What problem does this PR solve? File rag/svr/discord_svr.py is for discord bot. ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- rag/svr/discord_svr.py | 80 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 rag/svr/discord_svr.py diff --git a/rag/svr/discord_svr.py b/rag/svr/discord_svr.py new file mode 100644 index 00000000..85ec98a7 --- /dev/null +++ b/rag/svr/discord_svr.py @@ -0,0 +1,80 @@ +# +# Copyright 2024 The InfiniFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import discord +import requests +import base64 +import asyncio + +URL = '{YOUR_IP_ADDRESS:PORT}/v1/api/completion_aibotk' # Default: https://demo.ragflow.io/v1/api/completion_aibotk + +JSON_DATA = { + "conversation_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxx", # Get conversation id from /api/new_conversation + "Authorization": "ragflow-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # RAGFlow Assistant Chat Bot API Key + "word": "" # User question, don't need to initialize +} + +DISCORD_BOT_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxx" #Get DISCORD_BOT_KEY from Discord Application + + +intents = discord.Intents.default() +intents.message_content = True +client = discord.Client(intents=intents) + + +@client.event +async def on_ready(): + print(f'We have logged in as {client.user}') + + +@client.event +async def on_message(message): + if message.author == client.user: + return + + if client.user.mentioned_in(message): + + if len(message.content.split('> ')) == 1: + await message.channel.send("Hi~ How can I help you? ") + else: + JSON_DATA['word']=message.content.split('> ')[1] + response = requests.post(URL, json=JSON_DATA) + response_data = response.json().get('data', []) + image_bool = False + + for i in response_data: + if i['type'] == 1: + res = i['content'] + if i['type'] == 3: + image_bool = True + image_data = base64.b64decode(i['url']) + with open('tmp_image.png','wb') as file: + file.write(image_data) + image= discord.File('tmp_image.png') + + await message.channel.send(f"{message.author.mention}{res}") + + if image_bool: + await message.channel.send(file=image) + + +loop = asyncio.get_event_loop() + +try: + loop.run_until_complete(client.start(DISCORD_BOT_KEY)) +except KeyboardInterrupt: + loop.run_until_complete(client.close()) +finally: + loop.close()