2017-03-20 7 views
-1
import discord 
import random 
import pygame 
import time 

client = discord.Client() 
white = (255,255,255) 
clock = pygame.time.Clock() 
green = (0,255,0) 
red =(255,0,0) 
black = (0,0,0) 

global song 
song = 0 


@client.event 
async def on_message(message): 

     # we do not want the bot to reply to itself 
    if message.author == client.user: 
     return 
    if message.content.startswith(''): 
     while True: 
      if song == 1: 

       await client.send_message(message.channel, ';;play https://www.youtube.com/watch?v=cUbFzEMQ2Fs') 

      elif song == 2: 
       await client.send_message(message.channel, ';;play https://www.youtube.com/watch?v=YlomIQF2zbI') 
      else: 
       await client.send_message(message.channel, "HI") 
       pygame.quit() 






def interface(): 



    pygame.init() 
    gameDisplay = pygame.display.set_mode((500, 500)) 

    def button(x, y, w, h, ac, ic, songs): 
     mouse = pygame.mouse.get_pos() 
     click = pygame.mouse.get_pressed() 
     if x + w > mouse[0] > x and y + h > mouse[1] > y: 
      pygame.draw.rect(gameDisplay, ac, (x, y, w, h)) 
      if click[0] == 1 and songs != 0: 

     else: 
      pygame.draw.rect(gameDisplay, ic, (x, y, w, h)) 

    while True: 
     event = pygame.event.get() 
     gameDisplay.fill(white) 
     button(50, 50, 50, 50, red, green, 1) 
     button(50, 50, 50, 50, red, green, 2) 

     pygame.display.update() 
     clock.tick(60) 











@client.event 
async def on_ready(): 
    print('Logged in as') 
    print(client.user.name) 
    print(client.user.id) 
    print('------') 
    interface() 
    '''channel = client.get_channel('id') 
    await client.join_voice_channel(channel) 
    print('Bot should joined the Channel')''' 


client.run('token') 

私はちょっと立ち往生しているように誰にも提案をしていませんか? 私はパイゲームのインターフェイス上のボタンをクリックすると、ボットに何か言いたいと思います。不協和音を伴うパイーグ

+0

さらに「スレッド化」を見ることができます。そして、GUIで構築され、ボタンでとても便利なので、tkinterを使用することをお勧めします:) – abccd

+0

申し訳ありませんが、前にスレッディングを使用したことはありません – URFMODEG

+0

これを行うには、2つのイベントがあるのでループ。もう一つの方法は、もっと複雑な2つのループを組み合わせることです。私はそれをお勧めしませんし、あなたのタイトルを将来の読者が検索するかもしれないものに編集してください。何か「不一致のボットでGUIを使う方法」のようなもの – abccd

答えて

0

これはあなたのコードではありませんが、スレッド化を使用して両方を同時に実行するという大まかなアイデアをあなたに伝えます。私は例を通してすべてを説明しました。スクエアを押すと、選択したチャンネルにメッセージが送信されます。

import discord, random, pygame, time, asyncio 
import random # just for fun 
from threading import Thread 

### better to set them as a global variable 
client = discord.Client() 

pygame.init() # put these in the beginning 
gameDisplay = pygame.display.set_mode((500, 500)) 
white = (255,255,255) 
clock = pygame.time.Clock() 
green = (0,255,0) 
red = (255,0,0) 
black = (0,0,0) 
### 
#client.send_message() 
@client.event 
async def on_message(message): 
    # do what you want to do... 
    pass 

async def send_message(msg): 
    await client.send_message(client.get_channel('197481285852069898'), msg) # send a message, you can use channel id or any channel instance 

def run_gui(): # for running the gui 
    gameDisplay.fill(white) # initialize the screen white 
    current_color = red 
    my_rect = pygame.draw.rect(gameDisplay, current_color, (50,50,50,50)) # draw a rect and save the rect 
    while 1: # pygame mainloop 
     pygame.display.update() # update the screen 
     for event in pygame.event.get(): # proper way of retrieving events 
      if event.type == pygame.MOUSEBUTTONDOWN: # check if the event is right clicked on mouse 
       mouse = pygame.mouse.get_pos() 
       if my_rect.collidepoint(mouse): # see if it pressed the rect 
        # do stuff if the button is pressed... 
        current_color = red 
        # send a random message maybe? 
        choosen = random.choice(['hello','hi','I am a bot','wassup','I luv u <3']) 
        asyncio.ensure_future(send_message(msg=choosen)) # since discord.py uses asyncio 

       else: 
        # do stuff if it's not pressed... 
        current_color = green 
       # refill the screen white 
       gameDisplay.fill(white) 
       # redraw the rect 
       my_rect = pygame.draw.rect(gameDisplay, current_color, (50,50,50,50)) 

     clock.tick(60) # 60 fps 

def run_bot(): # for running the bot 
    client.run('token') # run the bot 

@client.event 
async def on_ready(): 
    print('Logged in as') 
    print(client.user.name) 
    print(client.user.id) 
    print('------') 

Thread(target=run_bot).start() # start thread the run the bot 
run_gui() # run the gui 
関連する問題