I want to make a command to send a message to a text channel or a user,and the message should be input at console,but input() seems to "block" the program. Although I had tried threading to figure out this problem,the problem still remain unsolve.How can I do to fix the problem?
easy code like this:
import discord
import typing
from discord.ext import commands
class BasicCmd(commands.Cog):
    def __init__(self, client):
        self.client = client
    @commands.command()
    async def test(self, ctx, *, receiver: typing.Union[discord.User, discord.TextChannel]):
        '''
        I want to get input from console
        but input() block the program.
        '''
        content = input('Enter something: ')
        await receiver.send(content)
def setup(client):
    client.add_cog(BasicCmd(client))
If I do it with threading:
import discord
import typing
import threading
from discord.ext import commands
class BasicCmd(commands.Cog):
    def __init__(self, client):
        self.client = client
    @commands.command()
    async def test(self, ctx, *, receiver: typing.Union[discord.User, discord.TextChannel]):
        '''
        I want to do this command with threading to figure out  
        this problem,but the problem still remain unsolve.
        '''
        content = threading.Thread(target=input,args=('Enter something: ',)).start()
        await receiver.send(content)
        '''It will  raise an HTTPException(Cannot send an enpty message,and the bot also "block" by "input")'''
def setup(client):
    client.add_cog(BasicCmd(client))
I have modified my program,but the input still block my program. code(just test):
import discord
import typing
import queue
import threading
from discord.ext import commands
class BasicCmd(commands.Cog):
    def __init__(self, client):
        self.client = client
    @commands.command()
    async def test(self, ctx):
        inputQueue = queue.Queue()
        inputThread = threading.Thread(target=_read_kbd_input, args=(inputQueue,), daemon=True)
        # It still remain "blocking"
        inputThread.start()
        while (True):
            if (inputQueue.qsize() > 0):
                input_str = inputQueue.get()
                print("input_str = {}".format(input_str))
                return
def _read_kbd_input(inputQueue):
    print('Ready for keyboard input:')
    a=True
    while a:
        input_str = input()
        inputQueue.put(input_str)
        a=False
def setup(client):
    client.add_cog(BasicCmd(client))
 
    