有没有一行我可以用来发布到discord频道? 也就是说,如果我先定义通道etc
更新:
import json
import asyncio
from bs4 import BeautifulSoup
from aiocfscrape import CloudflareScraper
from configparser import RawConfigParser
from datetime import datetime
def log(text):
print('[%s] %s' % (datetime.strftime(datetime.now(), '%H:%M:%S'), text))
def load_configini():
config = RawConfigParser()
with open('scumlogs.ini', 'r', encoding="utf-8") as f:
config.read_file(f)
global configini
configini = dict(config['GPORTAL'])
def save_configini():
parser = RawConfigParser()
parser.add_section('GPORTAL')
for key in configini.keys():
parser.set('GPORTAL', key, configini[key])
with open('scumlogs.ini', 'w', encoding="utf-8") as f:
parser.write(f)
async def read_logs():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'
}
values = ('user','password','serverid','loc','folder','admin_file','admin_line','chat_file','chat_line','kill_file','kill_line','login_file','login_line','violations_file','violations_line')
print('scumlogs v1.0, scum server logs downloader from gportal\nby htttps://GAMEBotLand.com')
try:
load_configini()
except:
global configini
configini = {}
for value in values:
if value not in configini:
configini[value] = ''
if configini['folder'] != '':
if configini['folder'][-1:] != '/' and configini['folder'][-1:] != '\\':
configini['folder'] = configini['folder'] + '/'
save_configini()
if configini['loc'] == 'com':
loc = 'com'
else:
loc = 'us'
URL_LOGIN = 'https://id2.g-portal.com/login?redirect=https://www.g-portal.{}/en/gportalid/login?'.format(configini['loc'])
URL_LOGS = 'https://www.g-portal.{}/en/scum/logs/{}'.format(configini['loc'], configini['serverid'])
async with CloudflareScraper() as session:
try:
log('connecting g-portal...')
payload = {'_method': 'POST', 'login': configini['user'], 'password': configini['password'],
'rememberme': '1'}
async with session.post(URL_LOGIN, data=payload, headers=headers) as raw_response:
response = await raw_response.text()
async with session.get(URL_LOGS) as raw_response:
response = await raw_response.text()
html = BeautifulSoup(response, 'html.parser')
select = html.find('div', {'class': 'wrapper logs'})
loglist = select['data-logs']
logs = json.loads(loglist)
for i in range(len(logs)):
getid = logs["file_" + str(i + 1)]
id = (getid[int(getid.find('Logs')) + 5:])
type = id.split('_')[0]
if configini[type + '_file'] != '':
if id < configini[type + '_file']:
continue
payload = {'_method': 'POST', 'load': 'true', 'ExtConfig[config]': getid}
async with session.post(URL_LOGS, data=payload, headers=headers) as raw_response:
response = await raw_response.text()
content = json.loads(response)
lines = content["ExtConfig"]["content"].splitlines()
filename = configini['folder'] + id
file = open(filename, "a+", encoding='utf-8')
found = False
writing = False
for line in lines:
if id == configini[type + '_file'] and not found:
if line == configini[type + '_line']:
found = True
continue
else:
file.write(line + '\n')
writing = True
if writing:
if found:
log('updating {}'.format(id))
else:
log('creating {}'.format(id))
file.close()
configini[type + '_file'] = id
configini[type + '_line'] = lines[-1]
save_configini()
except:
log('error connecting, check connectivity and scumlogs.ini')
await session.close()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(read_logs())
loop.close()
标记为“不起作用”的2/3部分就是我问这个问题的原因。 我对python不太了解,不知道为什么bot没有发布到频道。 我给所有的客户都写了一行。里面的发送(令牌)内容可能就是答案。 谢谢
原始日志提取代码:
import json
import asyncio
from bs4 import BeautifulSoup
from aiocfscrape import CloudflareScraper
from configparser import ConfigParser
from datetime import datetime
def log(text):
print('[%s] %s' % (datetime.strftime(datetime.now(), '%H:%M:%S'), text))
def load_configini():
config = ConfigParser()
with open('scumlogs.ini', 'r') as f:
config.read_file(f)
global configini
configini = dict(config['GPORTAL'])
def save_configini():
parser = ConfigParser()
parser.add_section('GPORTAL')
for key in configini.keys():
parser.set('GPORTAL', key, configini[key])
with open('scumlogs.ini', 'w') as f:
parser.write(f)
async def read_logs():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'
}
values = ('user','password','serverid','loc','folder','admin_file','admin_line','chat_file','chat_line','kill_file','kill_line','login_file','login_line','violations_file','violations_line')
print('scumlogs v1.0, scum server logs downloader from gportal\nby https://GAMEBotLand.com')
try:
load_configini()
except:
global configini
configini = {}
for value in values:
if value not in configini:
configini[value] = ''
save_configini()
if configini['loc'] == 'com':
loc = 'com'
else:
loc = 'us'
URL_LOGIN = 'https://id2.g-portal.com/login?redirect=https://www.g-portal.{}/en/gportalid/login?'.format(configini['loc'])
URL_LOGS = 'https://www.g-portal.{}/en/scum/logs/{}'.format(configini['loc'], configini['serverid'])
async with CloudflareScraper() as session:
try:
log('connecting g-portal...')
payload = {'_method': 'POST', 'login': configini['user'], 'password': configini['password'],
'rememberme': '1'}
async with session.post(URL_LOGIN, data=payload, headers=headers) as raw_response:
response = await raw_response.text()
async with session.get(URL_LOGS, headers=headers) as raw_response:
response = await raw_response.text()
html = BeautifulSoup(response, 'html.parser')
select = html.find('div', {'class': 'wrapper logs'})
loglist = select['data-logs']
logs = json.loads(loglist)
if configini['folder'] != '':
if configini['folder'][-1:] != '/' and configini['folder'][-1:] != '\\':
configini['folder'] = configini['folder'] + '/'
for i in range(len(logs)):
getid = logs["file_" + str(i + 1)]
id = (getid[int(getid.find('Logs')) + 5:])
type = id.split('_')[0]
if configini[type + '_file'] != '':
if id < configini[type + '_file']:
continue
payload = {'_method': 'POST', 'load': 'true', 'ExtConfig[config]': getid}
async with session.post(URL_LOGS, data=payload, headers=headers) as raw_response:
response = await raw_response.text()
content = json.loads(response)
lines = content["ExtConfig"]["content"].splitlines()
filename = configini['folder'] + type
file = open(filename, "a+", encoding='utf-8')
found = False
writing = False
for line in lines:
if id == configini[type + '_file'] and not found:
if line == configini[type + '_line']:
found = True
continue
else:
file.write(line + '\n')
writing = True
if writing:
if found:
log('updating {}'.format(id))
else:
log('creating {}'.format(id))
file.close()
configini[type + '_file'] = id
configini[type + '_line'] = lines[-1]
save_configini()
except:
log('error connecting, check connectivity and scumlogs.ini')
await session.close()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(read_logs())
loop.close()
这就是“发布到discord机器人”代码
import discord
from discord.ext import commands
from discord.ext.commands import Bot
import asyncio
TOKEN = '0000000000000000.XkEdpg.Iu9OsHVck-qrANPXop39ZMm78f4'
global client
client = discord.Client()
global channel
channel = '0000000000000000000000'
@client.event
async def on_ready():
msg = 'Test Bot ready to post logs'
for server in client.servers:
for channel in server.channels:
if channel.name == 'server-logs':
await client.send_message(channel, msg)
print(channel)
client.run(TOKEN)
我试图做的是从第一个代码中获取行,将其放入一个文件,输出到discord机器人
在给出答案之前,我想指出几件事。 首先,您不需要在函数外部全局化变量,因为它们在函数外部会使它们全局化
其次,您必须了解discord.py实际上是如何工作的,并且您使用的方法根本不起作用
您真正应该做的是将这些函数与discord.py函数所用的函数分开,然后在discord.py函数中包含一个命令或事件,该命令或事件调用您前面所做的函数
我建议你仔细阅读PEP8,并考虑我所说的话;然后重写你的代码,因为这将无法工作,从我所看到的;效率低下,写得很差(用最好的方式)
继续学习
相关问题 更多 >
编程相关推荐