Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在一行中发布到单个不协调通道_Python_Discord.py - Fatal编程技术网

Python在一行中发布到单个不协调通道

Python在一行中发布到单个不协调通道,python,discord.py,Python,Discord.py,有没有一行我可以用来发布到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

有没有一行我可以用来发布到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()

我试图做的是从第一个代码中获取行,将其放入一个文件,输出到discord机器人



在给出答案之前,我想指出几件事。 首先,您不需要在函数外部全局化变量,因为它们在函数外部会使它们全局化

其次,您必须了解discord.py实际上是如何工作的,并且您使用的方法根本不起作用

您真正应该做的是将这些函数与discord.py函数所用的函数分开,然后在discord.py函数中包含一个命令或事件,该命令或事件调用您前面所做的函数

我建议你仔细阅读PEP8,并考虑我所说的话;然后重写你的代码,因为这将无法工作,从我所看到的;效率低下,写得很差(用最好的方式)


继续学习

嗯。我已编辑了原始问题,以显示我有什么,但无法解决。1部分从网站中提取日志。bot部分应该将每行日志交互到bot。我可以把一个机器人发到s a频道,我可以下载日志,但我不能得到一个脚本来“两者都做”@cricket_007有一些代码。你能帮忙吗?谢谢泰勒。在PEP8的指导下,你给了我一些东西。顺便说一句,我不是一个程序员。我把各种东西剪切粘贴在一起,我真的不知道函数等是如何工作的,所以我真的不知道。。。这就是为什么它的代码写得很糟糕。我可以发布我想收集的两段代码吗?你能给我一些指导吗?以上是我试图把它们放在一起。这两份原件可能更能说明我想要实现的目标。我已经用我使用的原始代码添加到了原始帖子中。非常感谢。
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)