如何以固定的时间间隔向指定的不和谐频道发送预定义消息?


from http.client import HTTPSConnection 
from sys import stderr 
from json import dumps 
from time import sleep 

header_data = { 
"content-type": "application/json", 
"user-agent": "discordapp.com", 
"authorization": "IPlaceTokenHere", 
"host": "discordapp.com", 
"referer": "TheChannelUrlhere" 
} 

def get_connection(): 
return HTTPSConnection("discordapp.com", 443) 

def send_message(conn, channel_id, message_data): 
try: 
conn.request("POST", f"/api/v6/channels/{channel_id}/messages", message_data, header_data) 
resp = conn.getresponse() 

if 199 < resp.status < 300: 
print("Message sent...") 
pass 

else: 
stderr.write(f"Received HTTP {resp.status}: {resp.reason}n") 
pass 

except: 
stderr.write("Failed to send_messagen") 

def main(): 
message_data = { 
"content": "Hello, world!", 
"tts": "false", 
} 

send_message(get_connection(), "ChannelIDhere", dumps(message_data)) 

if __name__ == '__main__': 
while True:     # Infinite loop 
main()      # Send the message 
sleep(3600) # Wait an hour to repeat 

我这样做是为了发送像"早上好"之类的消息(托管在我的web服务器上)。事情是我想添加许多频道(因为我拥有很多服务器)与不同的消息。我想不出是怎么回事。

您可以简单地将多个通道id传递给send_message函数,循环使用它们并发送消息

def send_message(conn, message_data, *channel_ids):
for channel_id in channel_ids:
try: 
conn.request("POST", f"/api/v6/channels/{channel_id}/messages", message_data, header_data) 
resp = conn.getresponse() 

if 199 < resp.status < 300: 
print("Message sent...") 

else: 
stderr.write(f"Received HTTP {resp.status}: {resp.reason}n")  

except: 
stderr.write("Failed to send_messagen")
def main():
message_data = { 
"content": "Hello, world!", 
"tts": "false", 
} 

send_message(
get_connection(), 
dumps(message_data), 
"CHANNEL ID 1",
"CHANNEL ID 2",
"CHANNEL ID 3"
) 

注意,现在通道ID必须作为最后一个参数输入。此外,我在ifelse部分删除了不必要的pass关键字,因为它们在那里是无用的。如果你想在不同的时间戳发送消息,你应该看看asyncio函数的事情并发。

编辑:

如果您还希望每个通道发送不同的消息,您可以简单地将通道ID映射到字典中的消息

def send_message(conn, channels): # You can also use kwargs
for channel_id, message_data in channels.items():
try: 
conn.request("POST", f"/api/v6/channels/{channel_id}/messages", message_data, header_data) 
resp = conn.getresponse() 

if 199 < resp.status < 300: 
print("Message sent...") 

else: 
stderr.write(f"Received HTTP {resp.status}: {resp.reason}n")  

except: 
stderr.write("Failed to send_messagen")

def main():
data = {
"CHANNEL ID 1": json.dumps({"content": "message for channel 1", "tts": "false"}),
"CHANNEL ID 2": json.dumps({"content": "message for channel 2", "tts": "false"}),
"CHANNEL ID 3": json.dumps({"content": "message for channel 3", "tts": "false"})
}
send_message(get_connection(), data)

这个可以改进很多,我把它留给你。

最新更新